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

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" />

时间: 2024-10-08 00:34:59

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

【Android】揭秘如何利用Service与线程制造安卓后台通知栏推送

安卓设备的后台通知栏推送很烦,主要是可以通过利用安卓的Service功能,在app被点击Home键或者返回键之后,依旧可以在挂载后台运行.反正Home键或者返回键只能杀死Activity而不能终结Service的,不像Windows点关闭键默认是关闭程序界面+程序线程. 本文的意义相当于在Windows中制造一条线程,或者是对Windows应用程序的关闭键进行重写,让其应用程序的关闭仅仅是隐藏界面,不杀死进程. 理论上,只要这个Service不被安卓系统因内存不足所回收,会一直持续到设备重启,或

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

在很多时候,Service都不仅仅需要在后台运行,还需要和Activity进行通信,或者接受Activity的指挥,如何来实现,来看代码. 定义一个服务 1 // 创建一个服务,然后在onBind()中返回内部类(继承自Binder)的实例,使得活动能获得该实例,并操作此服务 2 public class MyService extends Service { 3 4 // 创建一个内部类的实例,被活动获得后,操作服务 5 private mBinder binder = new mBinder

python网络爬虫学习(六)利用Pyspider+Phantomjs爬取淘宝模特图片

本篇博文在编写时参考了http://cuiqingcai.com/2652.html,向作者表示感谢 一.新的问题与工具 平时在淘宝上剁手的时候,总是会看到各种各样的模特.由于自己就读于一所男女比例三比一的工科院校--写代码之余看看美女也是极好的放松方式.但一张一张点右键–另存为又显得太过麻烦而且不切实际,毕竟图片太多了.于是,我开始考虑用万能的python来解决问题. 我们先看看淘女郎页面的URL,https://mm.taobao.com/json/request_top_list.htm?

Android JNI 学习(六):JNI 接口整理 — Object Operations Api

一.AllocObject jobjectAllocObject(JNIEnv *env, jclass clazz); 分配新 Java 对象而不调用该对象的任何构造函数.返回该对象的引用. clazz 参数务必不要引用数组类. 参数: env:JNI 接口指针. clazz:Java 类对象. 返回值: 返回 Java 对象.如果无法构造该对象,则返回NULL. 抛出: InstantiationException:如果该类为一个接口或抽象类. OutOfMemoryError:如果系统内存

Android多媒体访问

Android的多媒体文件主要存储在/data/data/com.android.providers.media/databases目录下,该目录下有两个db文件,一个是内部存储数据库文件(internal.db),一个是存储卡数据库(external-XXXX.db).媒体文件的操作主要是围绕着这两个数据库来进行.这两个数据库的结构是完全一模一样的. Android提供了MediaStore类,该类是一个ContentProvider,管理着设备上自带的和外部的多媒体文件,同时包含着每一个多媒

android多媒体框架学习 详解 最新版本

一:多媒体框架概述   jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了!也体现了media 在整个android系统中的重要性!framework/av下都是些C/C++代码(libmedia,libmediaplayerservice,libstagefright),jni和 java api 还是保留在原来的位置,改革还不够彻底,但还是迈出了这一步,以后维护能更好的进

android学习笔记——利用BaseAdapter生成40个列表项

RT: main.xml ? 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"               android:orientation="vertical"        

Android 利用Service实现下载网络图片至sdk卡

1 package com.example.myapp5; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.Button; 8 /** 9 * Android 利用service实现下载图片功能 10 * @author shaobn 11 * @date

android 基础学习图片六progross

加载进度条应用 android 基础学习图片六progross,布布扣,bubuko.com