背景音乐的实现

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

 一、Activity类

复制代码
 1     package demo.camera;  
 2     import android.app.Activity;  
 3     import android.content.ComponentName;  
 4     import android.content.Context;  
 5     import android.content.Intent;  
 6     import android.content.ServiceConnection;  
 7     import android.os.Bundle;  
 8     import android.os.IBinder;  
 9     import android.view.View;  
10     /** 
11      * 演示Activity如何利用Service来完成后台Audio的播放功能 
12      * 同时如何将Service和Activity进行绑定 
13      * @author Administrator 
14      * 
15      */  
16     public class BackgroundAudioDemo extends Activity {  
17           
18         private AudioService audioService;  
19           
20         //使用ServiceConnection来监听Service状态的变化  
21         private ServiceConnection conn = new ServiceConnection() {  
22               
23             @Override  
24             public void onServiceDisconnected(ComponentName name) {  
25                 // TODO Auto-generated method stub  
26                 audioService = null;  
27             }  
28               
29             @Override  
30             public void onServiceConnected(ComponentName name, IBinder binder) {  
31                 //这里我们实例化audioService,通过binder来实现  
32                 audioService = ((AudioService.AudioBinder)binder).getService();  
33                   
34             }  
35         };  
36           
37         public void onCreate(Bundle savedInstanceState){  
38             super.onCreate(savedInstanceState);  
39             setContentView(R.layout.back_audio);  
40         }  
41           
42           
43         public void onClick(View v){  
44             int id = v.getId();  
45             Intent intent = new Intent();  
46             intent.setClass(this, AudioService.class);        
47             if(id == R.id.btn_start){  
48                 //启动Service,然后绑定该Service,这样我们可以在同时销毁该Activity,看看歌曲是否还在播放  
49                 startService(intent);  
50                 bindService(intent, conn, Context.BIND_AUTO_CREATE);  
51                 finish();  
52             }else if(id == R.id.btn_end){  
53                 //结束Service  
54                 unbindService(conn);  
55                 stopService(intent);  
56                 finish();  
57             }else if(id == R.id.btn_fun){  
58                 audioService.haveFun();  
59             }  
60         }  
61     }  
复制代码

2、Service类

复制代码
 1     package demo.camera;  
 2     import android.app.Service;  
 3     import android.content.Intent;  
 4     import android.media.MediaPlayer;  
 5     import android.os.Binder;  
 6     import android.os.IBinder;  
 7     import android.widget.MediaController.MediaPlayerControl;  
 8     /** 
 9      * 为了可以使得在后台播放音乐,我们需要Service 
10      * Service就是用来在后台完成一些不需要和用户交互的动作 
11      * @author Administrator 
12      * 
13      */  
14     public class AudioService extends Service implements MediaPlayer.OnCompletionListener{  
15           
16         MediaPlayer player;  
17           
18         private final IBinder binder = new AudioBinder();  
19         @Override  
20         public IBinder onBind(Intent arg0) {  
21             // TODO Auto-generated method stub  
22             return binder;  
23         }  
24         /** 
25          * 当Audio播放完的时候触发该动作 
26          */  
27         @Override  
28         public void onCompletion(MediaPlayer player) {  
29             // TODO Auto-generated method stub  
30             stopSelf();//结束了,则结束Service  
31         }  
32           
33         //在这里我们需要实例化MediaPlayer对象  
34         public void onCreate(){  
35             super.onCreate();  
36             //我们从raw文件夹中获取一个应用自带的mp3文件  
37             player = MediaPlayer.create(this, R.raw.tt);  
38             player.setOnCompletionListener(this);  
39         }  
40           
41         /** 
42          * 该方法在SDK2.0才开始有的,替代原来的onStart方法 
43          */  
44         public int onStartCommand(Intent intent, int flags, int startId){  
45             if(!player.isPlaying()){  
46                 player.start();  
47             }  
48             return START_STICKY;  
49         }  
50           
51         public void onDestroy(){  
52             //super.onDestroy();  
53             if(player.isPlaying()){  
54                 player.stop();  
55             }  
56             player.release();  
57         }  
58           
59         //为了和Activity交互,我们需要定义一个Binder对象  
60         class AudioBinder extends Binder{  
61               
62             //返回Service对象  
63             AudioService getService(){  
64                 return AudioService.this;  
65             }  
66         }  
67           
68         //后退播放进度  
69         public void haveFun(){  
70             if(player.isPlaying() && player.getCurrentPosition()>2500){  
71                 player.seekTo(player.getCurrentPosition()-2500);  
72             }  
73         }  
74     }  
复制代码

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

 

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

 

转载于:https://www.cnblogs.com/swq934063979/p/4617348.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值