读书人

(转)Android多媒体学习6:利用Service

发布时间: 2012-09-28 00:03:35 作者: rapoo

(转)Android多媒体学习六:利用Service实现背景音乐的播放

?

Android允许我们使用Service组件来完成后台任务,这些任务的允许不会影响到用户其他的交互。

?

1、Activity类

package demo.camera;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.view.View;/** * 演示Activity如何利用Service来完成后台Audio的播放功能 * 同时如何将Service和Activity进行绑定 * @author Administrator * */public class BackgroundAudioDemo extends Activity {private AudioService audioService;//使用ServiceConnection来监听Service状态的变化private ServiceConnection conn = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stubaudioService = null;}@Overridepublic void onServiceConnected(ComponentName name, IBinder binder) {//这里我们实例化audioService,通过binder来实现audioService = ((AudioService.AudioBinder)binder).getService();}};public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.back_audio);}public void onClick(View v){int id = v.getId();Intent intent = new Intent();intent.setClass(this, AudioService.class);if(id == R.id.btn_start){//启动Service,然后绑定该Service,这样我们可以在同时销毁该Activity,看看歌曲是否还在播放startService(intent);bindService(intent, conn, Context.BIND_AUTO_CREATE);finish();}else if(id == R.id.btn_end){//结束ServiceunbindService(conn);stopService(intent);finish();}else if(id == R.id.btn_fun){audioService.haveFun();}}}

?

?

2、Service类

?

package demo.camera;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.Binder;import android.os.IBinder;import android.widget.MediaController.MediaPlayerControl;/** * 为了可以使得在后台播放音乐,我们需要Service * Service就是用来在后台完成一些不需要和用户交互的动作 * @author Administrator * */public class AudioService extends Service implements MediaPlayer.OnCompletionListener{MediaPlayer player;private final IBinder binder = new AudioBinder();@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn binder;}/** * 当Audio播放完的时候触发该动作 */@Overridepublic void onCompletion(MediaPlayer player) {// TODO Auto-generated method stubstopSelf();//结束了,则结束Service}//在这里我们需要实例化MediaPlayer对象public void onCreate(){super.onCreate();//我们从raw文件夹中获取一个应用自带的mp3文件player = MediaPlayer.create(this, R.raw.tt);player.setOnCompletionListener(this);}/** * 该方法在SDK2.0才开始有的,替代原来的onStart方法 */public int onStartCommand(Intent intent, int flags, int startId){if(!player.isPlaying()){player.start();}return START_STICKY;}public void onDestroy(){//super.onDestroy();if(player.isPlaying()){player.stop();}player.release();}//为了和Activity交互,我们需要定义一个Binder对象class AudioBinder extends Binder{//返回Service对象AudioService getService(){return AudioService.this;}}//后退播放进度public void haveFun(){if(player.isPlaying() && player.getCurrentPosition()>2500){player.seekTo(player.getCurrentPosition()-2500);}}}

?

?

3、在清单文件AndroidManifest.xml中配置Service

?

??? ??? <service? android:name=".AudioService" />

?

?

?

?

转自chenjie19891104的的博客(http://blog.csdn.net/chenjie19891104/article/category/756236),以

便以后学习和查询!

?

?

?

Android多媒体学习六:利用Service实现背景音乐的播放


学习总结:

1、Activity中要绑定Service(bindService)

?
??
?? <1>、Service中需要要创建实现Binder的一个子类,实现getService()方法返回Service
?? <2>、Service中需要要实现onBind()方法,返回Binder的子类。
?? <3>、需要实现ServiceConnection,ServiceConnection有onServiceDisconnected()和onServiceConnected()两个抽象方法,
??????? 实现这2个方法,并在onServiceConnected()方法中调用参数Binder的getService()方法返回Service实例。
?
?? <4>、在Activity中使用Service实例调用各个方法。
??
2、MediaPlayer常用的方法


?? //创建MediaPlay实例
?? MediaPlayer player = MediaPlayer.create(this, R.raw.tt);??
?
?? //设置播放完后的监听事件 MediaPlayer.OnCompletionListener
?? player.setOnCompletionListener(this);??
??
?? //是否在播放
?? player.isPlaying();
??
?? //开始播放
? player.start();??

? //停止播放
? player.stop();??
?
?? //停止播放后,还要释放资源
? player.release();??


?


?

读书人网 >Android

热点推荐