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

1、Activity类

[java] view
plain
copy

  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. private AudioService audioService;
  18. //使用ServiceConnection来监听Service状态的变化
  19. private ServiceConnection conn = new ServiceConnection() {
  20. @Override
  21. public void onServiceDisconnected(ComponentName name) {
  22. // TODO Auto-generated method stub
  23. audioService = null;
  24. }
  25. @Override
  26. public void onServiceConnected(ComponentName name, IBinder binder) {
  27. //这里我们实例化audioService,通过binder来实现
  28. audioService = ((AudioService.AudioBinder)binder).getService();
  29. }
  30. };
  31. public void onCreate(Bundle savedInstanceState){
  32. super.onCreate(savedInstanceState);
  33. setContentView(R.layout.back_audio);
  34. }
  35. public void onClick(View v){
  36. int id = v.getId();
  37. Intent intent = new Intent();
  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. }else if(id == R.id.btn_end){
  45. //结束Service
  46. unbindService(conn);
  47. stopService(intent);
  48. finish();
  49. }else if(id == R.id.btn_fun){
  50. audioService.haveFun();
  51. }
  52. }
  53. }

2、Service类

[java] view
plain
copy

  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. MediaPlayer player;
  16. private final IBinder binder = new AudioBinder();
  17. @Override
  18. public IBinder onBind(Intent arg0) {
  19. // TODO Auto-generated method stub
  20. return binder;
  21. }
  22. /**
  23. * 当Audio播放完的时候触发该动作
  24. */
  25. @Override
  26. public void onCompletion(MediaPlayer player) {
  27. // TODO Auto-generated method stub
  28. stopSelf();//结束了。则结束Service
  29. }
  30. //在这里我们须要实例化MediaPlayer对象
  31. public void onCreate(){
  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. public int onStartCommand(Intent intent, int flags, int startId){
  41. if(!player.isPlaying()){
  42. player.start();
  43. }
  44. return START_STICKY;
  45. }
  46. public void onDestroy(){
  47. //super.onDestroy();
  48. if(player.isPlaying()){
  49. player.stop();
  50. }
  51. player.release();
  52. }
  53. //为了和Activity交互,我们须要定义一个Binder对象
  54. class AudioBinder extends Binder{
  55. //返回Service对象
  56. AudioService getService(){
  57. return AudioService.this;
  58. }
  59. }
  60. //后退播放进度
  61. public void haveFun(){
  62. if(player.isPlaying() && player.getCurrentPosition()>2500){
  63. player.seekTo(player.getCurrentPosition()-2500);
  64. }
  65. }
  66. }

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

<service 

            android:name=".AudioService" />

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

  1. Android开发学习之路--Service之初体验

    android最后一个组件便是service了,终于学习到最后一个组件了,从年前的开发环境的搭建,到现在学到最后一个组件花了三周的时间,期间记录的点点滴滴,照着书本学习编写的代码都受益匪浅,这里要感谢 ...

  2. Android开发学习之路-Service和Activity的通信

    在很多时候,Service都不仅仅需要在后台运行,还需要和Activity进行通信,或者接受Activity的指挥,如何来实现,来看代码. 定义一个服务 // 创建一个服务,然后在onBind()中返 ...

  3. Android JNI 学习(六):Object Operations Api

    一.AllocObject jobjectAllocObject(JNIEnv *env, jclass clazz); 分配新 Java 对象而不调用该对象的任何构造函数.返回该对象的引用. cla ...

  4. Android多媒体系列2:利用MediaRecorder实现录音

  5. Android开发学习之路--MediaPlayer之简单音乐播放器初体验

    很多时候我们都会用手机来播放音乐,播放视频,那么具体地要怎么实现呢,其实主要是MediaPlayer类来完成的.下面通过简单的例子来实现一首歌曲的播放吧.新建工程MediaPlayerStudy,这里 ...

  6. 【Android 多媒体应用】使用MediaCodec解码使用AudioTrack播放音频数据

    1.MainActivity.java import android.app.Activity; import android.os.Bundle; import android.os.Environ ...

  7. 【Android 多媒体应用】使用MediaRecoder录制,MediaPlayer播放音频数据

    1.MainActivity.java import android.annotation.TargetApi; import android.app.Activity; import android ...

  8. Android多媒体访问

    Android的多媒体文件主要存储在/data/data/com.android.providers.media/databases目录下,该目录下有两个db文件,一个是内部存储数据库文件(inter ...

  9. Android(java)学习笔记181:利用Service在后台播放背景音乐

    1.在android应用程序里,有一种没有UI的类(android.app.Service)——Service.简单来说,Service是一个 background process(背景程序),通过背 ...

随机推荐

  1. 为屏而生,为屏而死 - IT &quot;精英”们的杯与具

    为屏而生,为屏而死 - IT "精英"们的杯与具 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一 ...

  2. HDFS学习笔记(1)初探HDFS

    Hadoop分布式文件系统(Hadoop Distributed File System, HDFS) 分布式文件系统是一种同意文件通过网络在多台主机上分享的文件系统.可让多机器上的多用户分享文件和存 ...

  3. 抓包函数-pcap_next

     抓包函数        pcap_next_ex, pcap_next 抓包 #include <pcap/pcap.h> int pcap_next_ex(pcap_t *p, s ...

  4. 软件測试、ios中的測试概念以及步骤

    软件測试: 软件測试的目标是应该服务于软件项目的目标,能够通过建议反馈使用更加高效的方法和工具,提升软件开发效率以及软件开发质量.同一时候还能够通过过一些手段,更早.更快.很多其它地发现缺陷.从容减少 ...

  5. C# 用ManulResetEvent 控制Thread的 Suspend、Resume

    class Program { static void Main(string[] args) { Thread thread = new Thread(Work); thread.Start(); ...

  6. Adding Kentico controls to the Visual Studio toolbox

    https://docs.kentico.com/k10/references/kentico-controls https://docs.kentico.com/k10/references/ken ...

  7. 英语发音规则---D字母

    英语发音规则---D字母 一.总结 一句话总结: 1.D发[d]音? doctor ['dɒktə] n. 医生:博士 bread [bred] n. 面包:生计 hand [hænd] n. 手,手 ...

  8. Oracle回滚段的概念,用法和规划及问题的解决

    回滚段概述  回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值).回滚段的头部包含正在使用的该回滚段事务的信息.一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回 ...

  9. BZOJ 3052 树上带修莫队

    思路: 就是把带修莫队移到了树上 块的大小开到(n^2/3)/2 比较好- 这是一个卡OJ好题 //By SiriusRen #include <cmath> #include <c ...

  10. 洛谷P3356 火星探险问题(费用流)

    题目描述 火星探险队的登陆舱将在火星表面着陆,登陆舱内有多部障碍物探测车.登陆舱着陆后,探测车将离开登陆舱向先期到达的传送器方向移动.探测车在移动中还必须采集岩石标本.每一块岩石标本由最先遇到它的探测 ...