博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android多媒体学习六:利用Service实现背景音乐的播放
阅读量:6228 次
发布时间:2019-06-21

本文共 3064 字,大约阅读时间需要 10 分钟。

Android同意我们使用Service组件来完毕后台任务。这些任务的同意不会影响到用户其它的交互。

 

1、Activity类

[java] 
  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类

[java] 
  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" />

转载地址:http://hatna.baihongyu.com/

你可能感兴趣的文章
iptables学习笔记
查看>>
jQuery中的$(window)与$(document)的用法区别
查看>>
java中多种写文件方式的效率对比实验
查看>>
Cisco 2960 配置
查看>>
阿里大鱼数据库存储方案
查看>>
if判断的几种用法
查看>>
mysql安装与初始配置
查看>>
su命令
查看>>
linux 安装nginx
查看>>
建议把.CSV的默认打开方式改成任意一个文本 编辑器,系统自带的记事本就是个不错的选择...
查看>>
js 邮箱、11位手机正则
查看>>
使用Vim插件管理器Vundle
查看>>
Docker基于已有的镜像制新的镜像
查看>>
ServerCore命令
查看>>
nginx安装步骤总结-故障排查-浏览原理
查看>>
菜鸟学Linux 第071篇笔记 Mysql理论
查看>>
LINUX REDHAT第十四单元文档
查看>>
Java线程间通信之wait/notify
查看>>
jstat监控JVM内存使用情况、GC回收情况
查看>>
PHP ElasticSearch的使用
查看>>