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

1、Activity类

[java] view plain copy
  1. packagedemo.camera;
  2. importandroid.app.Activity;
  3. importandroid.content.ComponentName;
  4. importandroid.content.Context;
  5. importandroid.content.Intent;
  6. importandroid.content.ServiceConnection;
  7. importandroid.os.Bundle;
  8. importandroid.os.IBinder;
  9. importandroid.view.View;
  10. /**
  11. *演示Activity如何利用Service来完成后台Audio的播放功能
  12. *同时如何将Service和Activity进行绑定
  13. *@authorAdministrator
  14. *
  15. */
  16. publicclassBackgroundAudioDemoextendsActivity{
  17. privateAudioServiceaudioService;
  18. //使用ServiceConnection来监听Service状态的变化
  19. privateServiceConnectionconn=newServiceConnection(){
  20. @Override
  21. publicvoidonServiceDisconnected(ComponentNamename){
  22. //TODOAuto-generatedmethodstub
  23. audioService=null;
  24. }
  25. @Override
  26. publicvoidonServiceConnected(ComponentNamename,IBinderbinder){
  27. //这里我们实例化audioService,通过binder来实现
  28. audioService=((AudioService.AudioBinder)binder).getService();
  29. }
  30. };
  31. publicvoidonCreate(BundlesavedInstanceState){
  32. super.onCreate(savedInstanceState);
  33. setContentView(R.layout.back_audio);
  34. }
  35. publicvoidonClick(Viewv){
  36. intid=v.getId();
  37. Intentintent=newIntent();
  38. intent.setClass(this,AudioService.class);
  39. if(id==R.id.btn_start){
  40. //启动Service,然后绑定该Service,这样我们可以在同时销毁该Activity,看看歌曲是否还在播放
  41. startService(intent);
  42. bindService(intent,conn,Context.BIND_AUTO_CREATE);
  43. finish();
  44. }elseif(id==R.id.btn_end){
  45. //结束Service
  46. unbindService(conn);
  47. stopService(intent);
  48. finish();
  49. }elseif(id==R.id.btn_fun){
  50. audioService.haveFun();
  51. }
  52. }
  53. }

2、Service类

[java] view plain copy
  1. packagedemo.camera;
  2. importandroid.app.Service;
  3. importandroid.content.Intent;
  4. importandroid.media.MediaPlayer;
  5. importandroid.os.Binder;
  6. importandroid.os.IBinder;
  7. importandroid.widget.MediaController.MediaPlayerControl;
  8. /**
  9. *为了可以使得在后台播放音乐,我们需要Service
  10. *Service就是用来在后台完成一些不需要和用户交互的动作
  11. *@authorAdministrator
  12. *
  13. */
  14. publicclassAudioServiceextendsServiceimplementsMediaPlayer.OnCompletionListener{
  15. MediaPlayerplayer;
  16. privatefinalIBinderbinder=newAudioBinder();
  17. @Override
  18. publicIBinderonBind(Intentarg0){
  19. //TODOAuto-generatedmethodstub
  20. returnbinder;
  21. }
  22. /**
  23. *当Audio播放完的时候触发该动作
  24. */
  25. @Override
  26. publicvoidonCompletion(MediaPlayerplayer){
  27. //TODOAuto-generatedmethodstub
  28. stopSelf();//结束了,则结束Service
  29. }
  30. //在这里我们需要实例化MediaPlayer对象
  31. publicvoidonCreate(){
  32. super.onCreate();
  33. //我们从raw文件夹中获取一个应用自带的mp3文件
  34. player=MediaPlayer.create(this,R.raw.tt);
  35. player.setOnCompletionListener(this);
  36. }
  37. /**
  38. *该方法在SDK2.0才开始有的,替代原来的onStart方法
  39. */
  40. publicintonStartCommand(Intentintent,intflags,intstartId){
  41. if(!player.isPlaying()){
  42. player.start();
  43. }
  44. returnSTART_STICKY;
  45. }
  46. publicvoidonDestroy(){
  47. //super.onDestroy();
  48. if(player.isPlaying()){
  49. player.stop();
  50. }
  51. player.release();
  52. }
  53. //为了和Activity交互,我们需要定义一个Binder对象
  54. classAudioBinderextendsBinder{
  55. //返回Service对象
  56. AudioServicegetService(){
  57. returnAudioService.this;
  58. }
  59. }
  60. //后退播放进度
  61. publicvoidhaveFun(){
  62. if(player.isPlaying()&&player.getCurrentPosition()>2500){
  63. player.seekTo(player.getCurrentPosition()-2500);
  64. }
  65. }
  66. }

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

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

转载自:http://blog.csdn.net/chenjie19891104/article/details/6330720


更多相关文章

  1. 如何在后台运行Linux命令?
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. android Material主题中的button效果
  7. Android-AIDL通信
  8. android:paddingBottom=“@dimen/activity_horizontal_margin"的
  9. Android解析网页响应xml格式文件的一种方法

随机推荐

  1. Android数字签名获取证书指纹(SHA1)
  2. Android(安卓)Broadcast receiver 编程
  3. Android:实现一种浮动选择菜单的效果
  4. android学习笔记(4)-android的文件的操作
  5. Android(安卓)Studio开发Android(安卓)we
  6. Android(安卓)TextView富文本
  7. Google Android官方文档进程与线程(Proce
  8. Android(安卓)adb devices显示no permiss
  9. Android(安卓)USB通信弹出权限确认框
  10. java.net.UnknownServiceException: CLEA