【Tech-Android-Other】设置Android中Bordercas与Service复杂通信及Media资源在系统的表
来源:互联网 发布:mathematical软件 编辑:程序博客网 时间:2024/05/16 23:46
今天写音乐播放器,要实现Activity与Service之间通信。也发现Music是放在系统的表中的,查看系统的MediaStore.Audio.Media.EXTERNAL_CONTENT_URI的表可以得到以下信息:(存储Media信息的表会在放入Media资源的时候再自动加入Media信息到表中)
这里主要是展示在SDcard中的Media资源表:
由这个表可以得到完整的Media信息。
讲到Activity与Service通信了。
首先建立activtiyA 和activityB
然后建立Service;
在A,B.的页面都注册一个广播,两个页面的广播都是set一样的Action,只要在Serivce 发送这个Action的 广播的话,两个页面都可以接受广播了。
private void resignerServiceBrocase(){
actBrodercast= new MainActBrodercast();
IntentFilter filter=new IntentFilter();
filter.addAction(“updataallAct”);
registerReceiver(actBrodercast, filter);
}
再在Service注册一个广播,用来接受Activity发来的广播。当Actictiy发来的信息比较多比较乱的时候,我们在Service中广播接收处理就比较不好整理,这里我们可以模拟网页请求方式。
我们可以在Service中定义:
public final static String REQUESTCODE = "request";// 请求码
public final static int REQUEST_PLAY = 1;// 请求码值
public final static int REQUEST_STOP = -1;// 请求码值
public final static int REQUEST_PUASE = 0;// 请求码值
public final static String REQUESTCONTENT = "requestcontent";// 请求附带的内容
public final static String RESULTCODE = "music_state";// 结果码
public final static int MUSICSTATE_ISPLAY = 1;// 结果码值
public final static int MUSICSTATE_STOP = -1;// 结果码值
public final static int MUSICSTATE_PUASE = 0;// 结果码值
public final static String RESULTCONTENT = "requestcontent";// 结果附带的内容 主要是Musicsong
这样我们的Service在接受广播时候,可以先判断请求码,在获取请求内容,再处理下一步。(暂时不知道这个方法对后期操作有多大的影响,目前这样处理的话,各种广播请求可以清晰地进行处理了)
同样地,我们在Service发送结果广播的时候也可以先加入结果码,再让Activity根据结果码得到内容,对页面进行更新。
例如Service中:
/**
* 接受广播
*/
public class ServiceBrocase extends BroadcastReceiver {
public ServiceBrocase() {
}
@Override
public void onReceive(Context context, Intent intent) {
Log.i(MusicPlayerService.TAG, "Servicer.接受了广播");
int requestcode = intent.getIntExtra(
MusicPlayerService.REQUESTCODE, -1);
switch (requestcode) {
// 请求播放 带这个displayname 就是文件名进来
case MusicPlayerService.REQUEST_PLAY:
String music_displayname = intent
.getStringExtra(MusicPlayerService.REQUESTCONTENT);
playfromhead(music_displayname);
break;
// 请求暂停
case MusicPlayerService.REQUEST_PUASE:
//把mediaplayer停了 记录暂停时的位置
break;
// 请求停止复位
case MusicPlayerService.REQUEST_STOP:
break;
}
}
}
同理可以知道再Activity中可以同样的处理,
不过处理页面的时候要使用handler,记得哦~!
不知道还有其他更好的方法处理广播消息不?(求赐教)
关于注册广播和Service的时机:
1.我在我的App 的TopActivity中启动Service:startServic(intent);
2.然后在onStart()中 bindServic 和注册广播。 这样可以让页面每次切换回来都可以bindServic和接受广播。
3.在onPause中注销广播和服务,不注销的话也可以,不过会报异常。
- 【Tech-Android-Other】设置Android中Bordercas与Service复杂通信及Media资源在系统的表
- 【Tech-Android-Other】Android中获取SD卡下的图片资源
- 【Tech-Android-Other】设置Android的IntentServic与AysnTask的区别
- 【Tech-Android-Other】Android中有效自定义View的注意事项
- 【Tech-Android-Other】Android的一些Dug
- 【Tech-Android-Other】Android中的网络类型获取与处理
- 【Tech-Android-Other】Android中退出自己的APP的方法
- 【Tech-Android-Other】android中获取未安装的apk文件信息
- 【Tech-Android-Other】Android创建应用的桌面的快捷方式
- 【Tech-Android-Other】Android中的内存管理的工具使用方法
- 【Tech-Android-Other】android中的Parcelable的实现
- 【Tech-Android-Other】关于android1.5版本中不同屏幕的图片缩水
- 【Tech-Android-View】Android中listview的属性设置
- 【Tech-Android-Other】CheckTextView多选的使用
- 【Tech-Android-Other】Android性能优化
- 【Tech-Android-Other】Android中的Future
- 【Tech-Android-Other】Android性能优化
- 【Tech-Android-Other】Android性能优化
- 写一个函数,检查字符是否是整数,如果是,返回其整数值(最好用四句代码写出)
- Linux进程间通讯(IPC)间比较
- 2012年09月12日-13日
- 《随机数的猜测——C#第二周》
- 怎样在Ubuntu Linux上安装Oracle Java
- 【Tech-Android-Other】设置Android中Bordercas与Service复杂通信及Media资源在系统的表
- js中this的用法
- 进程间通信(总结)
- 黑马程序员_Java_数据类型
- C++:STL标准入门汇总
- 一种基于微博的喂狗装置实现设想
- 黑马程序员_Integer常量池
- c运算符优先级
- 安装SDK时遇到"Done loading packages"解决变法