版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】怎么在Android中通过Service实现一个音乐播放器
本篇文章给大家分享的是有关怎么在Android中通过Service实现一个音乐播放器,在下觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着在下一起来看看吧。这里将用到android的四大组件之一:Service注意:Service是自大组件之一,需要注册。什么是服务?1:“Service”意思即“服务”的意思,像Windows上面的服务一样,服务是在后台上运行,承担着静悄悄的不为人所注意的工作。2:Service运行在后台,它是不可见的、无界面的程序。3:Service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity,这个时候程序要在后台继续播放;比如检测SD卡上文件的变化;再或者在后台记录用户的地理信息位置的改变;或者启动一个服务来运行并一直监听某种动作等等。下面是源码:MainActivity/**
*
这是一个Service生命周期及开启服务的小例子
*
实现播放音乐功能
*/
public
class
MainActivity
extends
AppCompatActivity
{
/**
*
规定开始音乐、暂停音乐、结束音乐的标志
*/
public
static
final
int
PLAT_MUSIC=1;
public
static
final
int
PAUSE_MUSIC=2;
public
static
final
int
STOP_MUSIC=3;
private
MyBroadCastReceiver
receiver;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
receiver=new
MyBroadCastReceiver();
IntentFilter
filter=new
IntentFilter();
filter.addAction("plete");
registerReceiver(receiver,filter);
}
public
void
onClick(View
view){
switch
(view.getId()){
//开始音乐
case
R.id.btn_startmusic:
playingmusic(PLAT_MUSIC);
break;
//暂停
case
R.id.btn_pausemusic:
playingmusic(PAUSE_MUSIC);
break;
//停止
case
R.id.btn_stopmusic:
playingmusic(STOP_MUSIC);
break;
}
}
private
void
playingmusic(int
type)
{
//启动服务,播放音乐
Intent
intent=new
Intent(this,PlayingMusicServices.class);
intent.putExtra("type",type);
startService(intent);
}
@Override
protected
void
onDestroy()
{
super.onDestroy();
unregisterReceiver(receiver);
}
}MyBroadCastReceiver类(广播接收者):/**
*
这是一个Service生命周期及开启服务的小例子
*
实现播放音乐功能
*/
public
class
MainActivity
extends
AppCompatActivity
{
/**
*
规定开始音乐、暂停音乐、结束音乐的标志
*/
public
static
final
int
PLAT_MUSIC=1;
public
static
final
int
PAUSE_MUSIC=2;
public
static
final
int
STOP_MUSIC=3;
private
MyBroadCastReceiver
receiver;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
receiver=new
MyBroadCastReceiver();
IntentFilter
filter=new
IntentFilter();
filter.addAction("plete");
registerReceiver(receiver,filter);
}
public
void
onClick(View
view){
switch
(view.getId()){
//开始音乐
case
R.id.btn_startmusic:
playingmusic(PLAT_MUSIC);
break;
//暂停
case
R.id.btn_pausemusic:
playingmusic(PAUSE_MUSIC);
break;
//停止
case
R.id.btn_stopmusic:
playingmusic(STOP_MUSIC);
break;
}
}
private
void
playingmusic(int
type)
{
//启动服务,播放音乐
Intent
intent=new
Intent(this,PlayingMusicServices.class);
intent.putExtra("type",type);
startService(intent);
}
@Override
protected
void
onDestroy()
{
super.onDestroy();
unregisterReceiver(receiver);
}
}PlayingMusicServices类:/**
*
这是一个Start
Service
*/
public
class
PlayingMusicServices
extends
Service
{
//用于播放音乐等媒体资源
private
MediaPlayer
mediaPlayer;
//标志判断播放歌曲是否是停止之后重新播放,还是继续播放
private
boolean
isStop=true;
/**
*
onBind,返回一个IBinder,可以与Activity交互
*
这是Bind
Service的生命周期方法
*
@param
intent
*
@return
*/
@Nullable
@Override
public
IBinder
onBind(Intent
intent)
{
return
null;
}
//在此方法中服务被创建
@Override
public
void
onCreate()
{
super.onCreate();
if
(mediaPlayer==null){
mediaPlayer=new
MediaPlayer();
//为播放器添加播放完成时的监听器
mediaPlayer.setOnCompletionListener(new
MediaPlayer.OnCompletionListener()
{
@Override
public
void
onCompletion(MediaPlayer
mp)
{
//发送广播到MainActivity
Intent
intent=new
Intent();
intent.setAction("plete");
sendBroadcast(intent);
}
});
}
}
/**
*
在此方法中,可以执行相关逻辑,如耗时操作
*
@param
intent
:由Activity传递给service的信息,存在intent中
*
@param
flags
:规定的额外信息
*
@param
startId
:开启服务时,如果有规定id,则传入startid
*
@return
返回值规定此startservice是哪种类型,粘性的还是非粘性的
*
START_STICKY:粘性的,遇到异常停止后重新启动,并且intent=null
*
START_NOT_STICKY:非粘性,遇到异常停止不会重启
*
START_REDELIVER_INTENT:粘性的,重新启动,并且将Context传递的信息intent传递
*
此方法是唯一的可以执行很多次的方法
*/
@Override
public
int
onStartCommand(Intent
intent,
int
flags,
int
startId)
{
switch
(intent.getIntExtra("type",-1)){
case
MainActivity.PLAT_MUSIC:
if
(isStop){
//重置mediaplayer
mediaPlayer.reset();
//将需要播放的资源与之绑定
mediaPlayer=MediaPlayer.create(this,R.raw.birds);
//开始播放
mediaPlayer.start();
//是否循环播放
mediaPlayer.setLooping(false);
isStop=false;
}else
if
(!isStop&&mediaPlayer.isPlaying()&&mediaPlayer!=null){
mediaPlayer.start();
}
break;
case
MainActivity.PAUSE_MUSIC:
//播放器不为空,并且正在播放
if
(mediaPlayer!=null&&mediaPlayer.isPlaying()){
mediaPlayer.pause();
}
break;
case
MainActivity.STOP_MUSIC:
if
(mediaPlayer!=null){
//停止之后要开始播放音乐
mediaPlayer.stop();
isStop=true;
}
break;
}
return
START_NOT_STICKY;
}
@Override
public
void
onDestroy()
{
super.onDestroy();
}
}最后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版生物七年级上册 1.2.2《生物与环境组成生态系统》教案
- 《晋文公伐原》的原文与译文
- 中职语文高教版(2023)基础模块上册第三单元三 .《念奴娇 赤壁怀古》教案
- 2020-2021年高二数学《数列的递推公式》教案沪教版
- 高中体育与健康人教版全一册 6.2 过栏技术-跨栏跑 教案
- 7一匹出色的马教学设计
- 苏科版三年级上册信息技术2.3按需选用数字设备 教案
- 苏科版七下生物 9.1植物体的组成 教案
- 人教版二年级下册《音乐中的动物》教案
- 粤教版高二物理选修3-2第一章 电磁感应 第05节 电磁感应定律的应用(一)教学设计
- 南京大数据集团有限公司招聘笔试题库2024
- 4.2 让家更美好 课件-2024-2025学年 统编版道德与法治七年级上册
- GB/T 44311-2024适老环境评估导则
- GB 44506-2024人民警察警徽
- 2024年新人教版七年级上册道德与法治全册教案
- 2025届高考语文复习:补写语句+课件
- 《艺术概论》专升本考试复习题库(附答案)
- MOOC创新创业与管理基础(东南大学)
- 部编版六年级语文上册《桥》课件
- 《影城保洁管理及清洁服务标准》
- 铝扣板吊顶技术交底.doc
评论
0/150
提交评论