BroadcastReceiver的实例----基于Service的音乐播放器之二
该程序的后台Service会在播放状态发生改变时对外发送广播(广播将会激发前台Activity的BroadcastReceiver);它也会采用BroadcastReceiver监听来自前台Activity所发出的广播。后台Service的代码如下:
import java.io.IOException;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.IBinder;
public class MusicService extends Service{
	  MyReceiver serviceReceiver;
	  AssetManager am;
	  String[] musics = new String[]{
		      "wish.mp3","promise.mp3","beautiful.mp3"
	  };
	  MediaPlayer mPlayer;
	  //当前的状态,0x11代表没有播放,0x12代表正在播放,0x13代表暂停
	  int status = 0x11;
	  //记录当前正在播放的音乐
	  int current = 0;
  @Override
	  public IBinder onBind(Intent intent) {
		    return null;
	  }
	  @Override
	  public void onCreate() {
		    am = getAssets();
		    //创建BroadcastReceiver
		    serviceReceiver = new MyReceiver();
		    //创建IntentFilter
		    IntentFilter filter = new IntentFilter();
		    filter.addAction(MusicBox.CTL_ACTION);
		    registerReceiver(serviceReceiver, filter);
		    //创建MediaPlayer
		    mPlayer = new MediaPlayer();
		    //为MediaPlayer播放完成事件绑定监听器
		    mPlayer.setOnCompletionListener(new OnCompletionListener() {
      @Override
			      public void onCompletion(MediaPlayer mp) {
				        current++;
				        if(current >= 3){
					          current = 0;
				        }
				        //发送广播通知Activity更改文本框
				        Intent sendIntent = new Intent(MusicBox.UPDATE_ACTION);
				        sendIntent.putExtra("current", current);
				        //发送广播,将被Activity组件中的BroadcastReceiver接收到
				        sendBroadcast(sendIntent);
				        //准备并播放音乐
				        prepareAndPlay(musics[current]);
			      }
		    });
		    super.onCreate();
	  }
public class MyReceiver extends BroadcastReceiver{
    @Override
		    public void onReceive(Context context, Intent intent) {
			      int control = intent.getIntExtra("control", -1);
			      switch(control){
			        //播放或暂停
			        case 1:
				          //原来处于没有播放状态
				          if(status == 0x11){
					            //准备并播放音乐
					            prepareAndPlay(musics[current]);
					            status = 0x12;
				          }
				          //原来处于播放状态
				          else if(status == 0x12){
					            //暂停
					            mPlayer.pause();
					            //改变为暂停状态
					            status = 0x13;
				          }
				          //原来处于暂停状态
				          else if(status == 0x13){
					            //播放
					            mPlayer.start();
					            //改变状态
					            status = 0x12;
				          }
				          break;
			      //停止声音
			      case 2:
				        //如果原来正在播放或暂停
				        if(status == 0x12 || status == 0x13){
					          //停止播放
					          mPlayer.stop();
					          status = 0x11;
        }
			      }
			      //发送广播通知Activity更改图标、文本框
			      Intent sendIntent = new Intent(MusicBox.UPDATE_ACTION);
			      sendIntent.putExtra("update", status);
			      sendIntent.putExtra("current", current);
			      //发送广播,将被Activity组件中的BroadcastReceiver接收到
			      sendBroadcast(sendIntent);
    }
	  }  
	  private void prepareAndPlay(String music){
		    try {
			      //打开指定音乐文件
			      AssetFileDescriptor afd = am.openFd(music);
			      mPlayer.reset();
			      //使用MediaPlayer加载指定的声音文件
			      mPlayer.setDataSource(afd.getFileDescriptor(),
					      afd.getStartOffset(),afd.getLength());
			      //准备声音
			      mPlayer.prepare();
			      //播放
			      mPlayer.start();
		    } catch (IOException e) {
			      e.printStackTrace();
		    }
	  }
}
BroadcastReceiver的实例----基于Service的音乐播放器之二的更多相关文章
- BroadcastReceiver的实例----基于Service的音乐播放器之一
		下面的程序开发了一个基于Service的音乐盒,程序的音乐将会由后台运行的Service组件负责播放,当后台的播放状态发生改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台A ... 
- 基于jQuery虾米音乐播放器样式代码
		分享一款基于jQuery虾米音乐播放器样式代码.这是一款基于jquery+html5实现的虾米音乐播放器源码下载.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div c ... 
- QT5:C++实现基于multimedia的音乐播放器(二)
		今天接着上一篇来实现播放器的槽函数. 先来实现播放模式,槽函数如下: //播放模式 void Music::musicPlayPattern() { //z=++z%3; ) { //顺序播放 pla ... 
- QT5:C++实现基于Multimedia的音乐播放器(序)
		前段时间C++课设,决定做个播放器,于是参考了网上的代码后,做了个很简陋的音乐播放器(只写了MP3格式)出来,虽然功能甚少,但还是决定把过程记录一下. 成品如下图: 播放器功能: 上.下一首,音量控制 ... 
- 兼容IE7音乐播放器之jplayer的使用
		首先列出为何要写这篇随笔的原因: 1:兼容IE7 2:音乐播放器 3:任意控制播放器 1: 最近做的网站需要兼容IE7,在此之前已经写好了关于音乐播放的插件,火狐,IE8以上,以及谷歌浏览器等都可以随 ... 
- iOS 音乐播放器之锁屏效果+歌词解析
		概述 功能描述:锁屏歌曲信息.控制台远程控制音乐播放:暂停/播放.上一首/下一首.快进/快退.列表菜单弹框和拖拽控制台的进度条调节进度(结合了QQ音乐和网易云音乐在锁屏状态下的效果).歌词解析并随音乐 ... 
- 音乐播放器之myeclipse项目
		音乐播放器: 这个音乐播放器是用myeclipse打开的项目.假设有问题记得改掉文件的路径名.还有假设图片不显示也可能是图片的路径名不正确,如音乐无法播放也可能是路径名不正确.总之这个游戏有文件的引用 ... 
- QT5:C++实现基于multimedia的音乐播放器(一)
		上一篇里简略的描述了一下播放器的实现,这一篇开始具体描述一下过程. 环境配置:Qt Creator 打开Qt Creator,创建一个new project,项目名称随你喜欢(我的是MusicPlay ... 
- iOS - 音乐播放器之怎么获取音乐列表
		方法一: 这个方法是通过获取到沙盒路径,来得到音乐的路径(使用这个方法需要把音乐放进沙盒) NSFileManager *manager = [NSFileManager defaultManager ... 
随机推荐
- 无法在web服务器上启动调试。打开的URL的IIS辅助进程当前没有运行。
			调试时弹出:无法在web服务器上启动调试.打开的URL的IIS辅助进程当前没有运行. 
- iOS - File Archive/UnArchive 文件压缩/解压
			1.ZipArchive 方式 ZipArchive 只能对 zip 类文件进行压缩和解压缩 GitHub 网址:https://github.com/ZipArchive/ZipArchive Zi ... 
- HDU 1754
			成段更新 easy #include <stdio.h> #include <string.h> #include <math.h> #include <io ... 
- iOS 推送证书生成pem
			cert: openssl x509 -in aps_development\ \(8\).cer -inform der -out pushDeveCerTopem.pem key: openssl ... 
- js分组排序算法, OrderBy
			由于项目中需要对数据进行分组排序,类似于sql中 order by column1,column2.... 实现的关键是 分组排序,第一个column1,排序完成之后,对其分组,然后按照column ... 
- hdu1907(anti-sg入门)
			改变了下规则,现在变成了最后拿的人输. 如果对于单纯的nim的话,只需要判断每堆都是1个石子的特殊情况. 因为如果存在有大于1个石子的堆话,类似于nim的取法,处于必胜状态的一方只需要在 对方取完后只 ... 
- HTML标签的默认样式
			body 有默认的内外边距(margin:0;padding:0); p 有默认的外边距(margin:0;) 
- php 使用 restler 框架构建 restfull api
			php 使用 restler 框架构建 restfull api restler 轻量级,小巧,构建restfull api非常方便! 官网:http://restler3.luracast.com/ ... 
- Linux下安装最新的Eclipse
			欢迎关注我的社交账号: 博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html GitHub地址: https://github.com/ji ... 
- js将html5日期格式转为long型
			var moveInArray = $("#move_in").val().split('-'); var d = new Date(); d.setYear(moveInArra ... 
