【移动应用开发技术】怎么在Android中通过Service实现一个音乐播放器_第1页
【移动应用开发技术】怎么在Android中通过Service实现一个音乐播放器_第2页
【移动应用开发技术】怎么在Android中通过Service实现一个音乐播放器_第3页
【移动应用开发技术】怎么在Android中通过Service实现一个音乐播放器_第4页
【移动应用开发技术】怎么在Android中通过Service实现一个音乐播放器_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】怎么在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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论