




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】怎么在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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年尾矿处理技术革新与生态环境修复技术应用现状及创新前景报告
- 西方公共管理与政治制度的交汇试题及答案
- 2025年城市污水处理厂智能化升级改造与资源化利用研究报告
- 非政府组织对政策制定的影响探讨试题及答案
- 数据如何在网络中传输试题及答案
- 项目风险评估工具的选择与应用试题及答案
- 小微企业融资的创新与实践
- 切实有效的软件设计师考试试题及答案
- 2025年同位素分离装置合作协议书
- 西方政治制度与环境正义研究试题及答案
- 2023年普洱市小升初英语考试题库及答案解析
- 国开电大《工程数学(本)》形成性考核作业5答案
- 大学英语四级试卷
- 阿克琉斯和爱阿斯玩骰子课件
- 2023年燕舞集团有限公司招聘笔试题库及答案解析
- 部编版道德与法治五(下)第三单元百年追梦复兴中华教学课件
- 2019三福百货品牌介绍51P
- 多元统计分析在经济中的应用论文(3篇)
- OpenStack云计算平台实战课件(完整版)
- FIDIC施工合同条件(红皮书)
- CATIA实用入门教程ppt课件(124页PPT)
评论
0/150
提交评论