android跨应用发广播
来源:互联网 发布:被淘宝托管骗了怎么办 编辑:程序博客网 时间:2024/05/22 00:55
最近写的一个安卓项目里用到了跨应用间广播通信技术,说白点就是在不同的APP之间发送广播来接收消息,我在做的时候也遇到了一些问题,不过最后都解决了,特在此把自己的遇到的问题分享出来,方便遇到同样的问题的朋友能够快速解决。
广播注册分为动态注册和静态注册,如果有人不太明白的话,可以自行度娘一下。之前我使用的是静态注册的方式,但是很麻烦,而且还容易报错。我就遇到MainActivity$MyReceiver; no empty constructor这种错误,后来在百度上看到这种错误,是因为要把自己写的BroadcastReceiver前加上static,但是这样加上的结果就是很多跨进程之间传递的变量就不好用了,所以后来又改成用动态方式注册广播,最后把问题解决了。然后自己写了个小demo,老规矩,还是先上代码吧!
这是第一个APP的内容,其实内容很简单,就只有一个发广播的功能,可以使用Bundle传递很多信息,我这里就简单的传了一个String值。
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.button1).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//发送广播 Intent intent = new Intent(); intent.setAction("com.example.BroadCast");//这里可以自己定义 Bundle bundle=new Bundle(); bundle.putString("aaa", "111"); intent.putExtras(bundle); MainActivity.this.sendBroadcast(intent);}});}}
这是第二个APP,写了一个Receiver,不过大家要注意广播一定要注销,注销的位置可以根据你的实际情况来决定,我这里是写在onDestory()里,代码如下:
public class MainActivity extends Activity {TestBroadReceiver testBroadReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);registerTestBroadReceiver();// 开启APP的时候注册广播}@Overrideprotected void onDestroy() {// 关闭APP的时候注销广播unRegisterTestBroadReceiver();super.onDestroy();}private void unRegisterTestBroadReceiver(){if(testBroadReceiver!=null){unregisterReceiver(testBroadReceiver);}}private void registerTestBroadReceiver(){testBroadReceiver=new TestBroadReceiver();IntentFilter filter=new IntentFilter();filter.addAction("com.example.BroadCast");registerReceiver(testBroadReceiver, filter);}/*** * 写一个广播接收器 * @author blh * */ public class TestBroadReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString action=intent.getAction();if(action.equals("com.example.BroadCast")){Bundle bundle=intent.getExtras(); if(bundle!=null){ String msg=bundle.getString("aaa"); Toast.makeText(context, "接收到了:"+msg, Toast.LENGTH_LONG); }}} }}
这样子的话就会在第二个app收到吐司。好了,代码已经上完了,大家拿去改改就可以直接用了,是不是很简单呢!
0 0
- android跨应用发广播
- android 命令模拟发广播
- android 发广播和接收
- Android中Activity按钮发广播
- android应用发邮件
- Android应用卸载广播监听
- BroadcastReceiver ---Android中的广播机制(发短信)
- Android 通过adb发广播的形式开启activity
- CAsyncSocket发广播包
- 发本地广播
- Android应用开发-----------------接受照相机拍照广播和录像广播
- 广播+AssetsManager实现Android应用换肤
- Android广播事件机制及应用
- Android广播事件机制及应用
- 【Android】BroadCast广播机制应用与实例
- 【Android】BroadCast广播机制应用与实例
- Android的广播功能Broadcast的应用
- android停止应用不能接收广播
- 微软面试百题007——链表相交
- 动态内存与智能指针
- 大学两年的总结与感悟
- MATLAB 读取多个子文件夹下相同格式的文件
- python 计算两个时间的月差代码
- android跨应用发广播
- Android学习笔记042之事件处理机制
- 给未来程序员的15个顶级职业建议
- 经常使用的 第三方
- 版本更新
- 关于sizeof注意的问题
- utf8编码原理详解
- Nginx配置upstream实现负载均衡
- JDBC笔记