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() { @Override public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub audioService = null; } @Override public 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){ //结束Service unbindService(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(); @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return binder; } /** * 当Audio播放完的时候触发该动作 */ @Override public void onCompletion(MediaPlayer player) { // TODO Auto-generated method stub stopSelf();//结束了,则结束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

 

                    android:name=".AudioService" />

 

 

更多相关文章

  1. Android(安卓)Studio中Run按钮app的module显示红叉
  2. Android中的几种网络请求方式
  3. location of android sdk has not been setup in the preference
  4. Android与IOS后台机制比较
  5. android -- FileObserver 类用法及限制
  6. 设置Listview item 的分隔线
  7. android aidl进程间通信
  8. Android(安卓)App快速启动
  9. Android.mk编译脚本 & AndroidManifest.xml编写及注释

随机推荐

  1. Android(安卓)系统(264)---android进阶——
  2. Android中Shape和selector的使用
  3. 自己收藏的Android开发的知识点各种传送
  4. Android学习笔记之MENU
  5. Android进阶---android databinding 使用
  6. Android材料设计
  7. Android中BindService方式使用的理解
  8. Android 应用初始化及窗体事件的分发
  9. android 原生的 MediaExtractor,MediaCod
  10. android快速实现沉浸式