一、跨程序发送广播
- 广播是一种可以跨进程的通信方式;
- 我们来写一个发送有序广播的项目
- 首先先建立一个BroadcastTest3项目
- 然后写一个接收广播的类,继承自BroadcastReceiver
package com.example.broadcasttest3; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class AnotherBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context,Intent intend) { Toast.makeText(context, "receive in AnotherBroadcastReceiver",Toast.LENGTH_SHORT).show(); } }
- 然后在AndroidManifest.xml文件中注册该类
<application ...................省略代码................... <receiver android:name=".AnotherBroadcastReceiver"> <intent-filter> <action android:name="com.example.broadcasttest.MY_BROADCAST" /> </intent-filter> </receiver> </application>
- 可以看到该类接受的是
com.example.broadcasttest.MY_BROADCAST
的广播 - 接下来我们安装好这个项目2
- 我们回到项目1,点击
send broadcast
按钮,会出现
- 然后紧接着会出现另一个项目的提示
- 这就证明了我们应用程序发出的广播是可以被其他程序所接收到的。
注意:
com.example.broadcasttest.MY_BROADCAST
的广播已经在第一个项目的Androidmanifest.xml
文件中定义好了。
二、发送有序广播
- 我们聚焦回项目1
- 接下来我们发送有序广播,首先先修改触发广播的方法,在
MainActivity.java
中
//将sendBroadcast(intent);修改为如下有序广播的方法 sendOrderedBroadcast(intent,null);
- 该方法首先传入intent,第二个参数是与权限相关的字符串,这里传入null即可
- 然后给我们的项目1的
AndroidManifest.xml
中文件添加优先级,代表项目1,在项目2之前获得该广播
<receiver android:name=".MyBroadcastReceiver"> <intent-filter android:priority="100"> <action android:name="com.example.broadcasttest.MY_BROADCAST"/> </intent-filter> </receiver>
- 其实添加了一个属性而已
android:priority="100"
- 当然这个项目1,也可以截断这个广播不让它继续传播,修改接收类
MyBroadcastReceiver
public void onReceive(Context context,Intent intent) { Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show(); abortBroadcast(); }
- 也就是多加了一个截断方法而已
三、使用本地广播
- 我们上面介绍的都是全局广播,所有程序都可以接收,所以会有安全性问题,同时也容易形成垃圾广播
- android给我们提供了只在本程序里发送接收的广播,使用
LocalBroadcastManager
来管理 - 我们下次连载再进行修改代码。
四、源码:
- BroadcastTest2
- BroadcastTest3
- https://github.com/ruigege66/Android/tree/master/BroadcastTest2
- https://github.com/ruigege66/Android/tree/master/BroadcastTest3
- CSDN:https://blog.csdn.net/weixin_44630050
- 博客园:https://www.cnblogs.com/ruigege0000/
- 欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流,后台回复“礼包”获取Java大数据学习视频礼包