Service Broadcast简单音乐播放功能
在Activity上有两个ImageButton,分别控制播放/暂停、停止。

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (ImageButton) findViewById(R.id.play);
stop = (ImageButton) findViewById(R.id.stop);
start.setOnClickListener(this);
stop.setOnClickListener(this);
activityReceiver = new ActivityReceiver();//广播接收器,主要负责播放/暂停按钮图标的变换
IntentFilter filter = new IntentFilter();
filter.addAction("com.sunny.update");
registerReceiver(activityReceiver, filter);
Intent intent = new Intent(this, MyService.class);//启动服务,音乐的播放用Service控制,不会因Activity退出而停止
startService(intent);
}
其中ActivityReceiver 如下,主要负责播放/暂停按钮图标的变换,过滤接收Action为com.sunny.update的Intent:
public class ActivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
int update=intent.getIntExtra("update", -1);
switch(update){
case 1:
status=1;
break;
case 2:
start.setImageResource(R.drawable.pause);
status=2;
break;
case 3:
start.setImageResource(R.drawable.play);
status=3;
break;
}
}
}
为两个按钮注册时间,发送Action为com.sunny.control的广播控制音乐播放,由Service中的广播接收器接收:
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent("com.sunny.control");
switch (v.getId()) {
case R.id.play:
intent.putExtra("ACTION", 1);
sendBroadcast(intent);
break;
case R.id.stop:
intent.putExtra("ACTION", 2);
sendBroadcast(intent);
break;
}
}
在MyService中,启动时的onCreate()方法:
public void onCreate() {
// TODO Auto-generated method stub
status=1;//当前状态,1 没有声音 2正在播放 3 暂停
serviceReceiver=new ServiceReceiver();//广播接收器,控制音乐播放
IntentFilter filter=new IntentFilter();
filter.addAction("com.sunny.control");
registerReceiver(serviceReceiver, filter);
super.onCreate();
}
其中广播接收器ServiceReceiver 如下:
class ServiceReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
int action=intent.getIntExtra("ACTION", -1);//过滤Intent Action为com.sunny.control的广播,根据ACTION参数控制
switch(action){
case 1:
if(status==1){//在正在播放状态下
mp=MediaPlayer.create(context, R.raw.intro);
status=2;
Intent sendIntent=new Intent("com.sunny.update");
sendIntent.putExtra("update", 2);
sendBroadcast(sendIntent);
mp.start();
}
else if(status==2){//在暂停状态下
mp.pause();
status=3;
Intent sendIntent=new Intent("com.sunny.update");
sendIntent.putExtra("update",3);
sendBroadcast(sendIntent);
}else if(status==3){//在暂停后重新播放状态下
mp.start();
status=2;
Intent sendIntent=new Intent("com.sunny.update");
sendIntent.putExtra("update", 2);
sendBroadcast(sendIntent);
}
break;
case 2:
if(status==2||status==3){
mp.stop();
status=1;
Intent sendIntent=new Intent("com.sunny.update");
sendIntent.putExtra("update",1);
sendBroadcast(sendIntent);
}
}
}
}


Service Broadcast简单音乐播放功能的更多相关文章
- Android实现简单音乐播放器(MediaPlayer)
Android实现简单音乐播放器(MediaPlayer) 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能 ...
- Android实现简单音乐播放器(startService和bindService后台运行程序)
Android实现简单音乐播放器(MediaPlayer) 开发工具:Andorid Studio 1.3运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能有 ...
- iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)
代码地址如下:http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该怎 ...
- Android 实现简单音乐播放器(二)
在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我简单总结一些功能实现过程中的要点和有趣的细节,结合MainActivity.java代码进行说明(写出 ...
- Android 实现简单音乐播放器(一)
今天掐指一算,学习Android长达近两个月了,今天开始,对过去一段时间的学习收获以及遇到的疑难杂症做一些总结. 简单音乐播放器是我自己完成的第一个功能较为完整的APP,可以说是我的Android学习 ...
- html5 简单音乐播放器
html5 简单音乐播放器 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> < ...
- Android——简单音乐播放器
使用MediaPlayer做的简单音乐播放器,更多内容请到百度经验查看 http://jingyan.baidu.com/article/60ccbceb63452364cab197f1.html ...
- Android(java)学习笔记234: 服务(service)之音乐播放器
1.我们播放音乐,希望在后台长期运行,不希望因为内存不足等等原因,从而导致被gc回收,音乐播放终止,所以我们这里使用服务Service创建一个音乐播放器. 2.创建一个音乐播放器项目(使用服务) (1 ...
- 从零开始利用vue-cli搭建简单音乐网站(四)
上一篇文章中说到这一篇博客会实现音乐播放功能,只是令我意外的是,如果利用h5的audio标签,几行代码就实现了......先来看一下最终效果吧. 这里直接用了audio标签,样式没有怎么管,能获得音乐 ...
随机推荐
- RedHat Linux Shell常用命令(多数也适用于Unix和AIX)
注:本文转载自疯狂的矩阵一文,http://www.cnblogs.com/520sojustdoit/p/4642568.html --------------------------------- ...
- 上白泽慧音——tarjian
题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间 ...
- error: stray '\343' in program 问题解决
当我们从网上copy一段代码后,总会出现这个问题.博主在Arduino环境中也出现了,so,这个问题应该是C语言和C++编译器中才会出现的. test_int:19: error: str ...
- css命名规范—CSS样式命名整理
CSS样式命名整理 页面结构 容器: container/wrap整体宽度:wrapper页头:header内容:content页面主体:main页尾:footer导航:nav侧栏:sidebar栏目 ...
- java.lang.IllegalAccessException: Class XX can not access a member of class XXX with modifiers "private static"
当前需求: 利用反射获取某一属性值运行结果:java.lang.IllegalAccessException: Class com.example.demo.test.Reflect can not ...
- selenium的定位
id定位 find_element_by_id()方法通过id来定位元素 例如: find_element_by_id("kw") find_element_by_id(&quo ...
- python打开文件可以有多种模式
一.python打开文件可以有多种模式,读模式.写模式.追加模式,同时读写的模式等等,这里主要介绍同时进行读写的模式r+ python通过open方法打开文件 file_handler = open( ...
- php随机生成国内ip地址
获得一个国家所有ip段,随机生成国内ip地址的缩水实现.注意: $ip_long数组中后5个值在64位系统中可能是错误的(下面代码中 $ip_long 数组的后五个值在32位系统中为负数,64位系 ...
- 给 MSYS2 添加国内源
https://wiki.qt.io/MSYS2pacman -S base-devel git mercurial svn wget p7zip软件包 开发包 http://mirrors.ustc ...
- Spring持久化之MyBatis
MyBatis是一个优秀的轻量级持久化框架,本文主要介绍MyBatis与Spring集成的配置与用法. 1. Spring MyBatis配置 1.1 添加Maven依赖 在pom.xml文件里添加m ...