Android 发送自定义广播

xiaoxiao2021-02-27  266

在发送广播之前,我们还需要先定义一个广播接收器来准备接收这个广播,因此新建一个MyBroadcastReceiver,如下: public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.w("MyBroadcastReceiver","reecived MyBroadcastReceiver"); } } 当接收到自定义广播的时候,就会打印这条log,然后就要在清单文件中对这个广播接收器进行修改: <receiver android:name=".BootCompleteReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <receiver android:name=".MyBroadcastReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.doyoulove.MY_RECEIVER" /> </intent-filter> </receiver> </application> 上面的 广播接收器是 静态注册的,与自定义广播接受者非常类似,不要忘了注意权限的问题 可以看到,这里让 MyBroadcastReceiver接收一条名为 "com.doyoulove.MY_RECEIVER" 的广播,所以发送广播时,我们就需要发送这样的一条广播。  可以将发送广播添加到某一个按钮之类的点击事件中, Intent intent=new Intent("com.doyoulove.MY_RECEIVER"); sendBroadcast(intent);这样所有监听这条广播的广播接收者都会收到消息,此时发出去的广播就是一条标准广播。同时可以在intent中携带一些数据传递给广播接收者。广播是一种可以跨进程的通信方式,这一点从接收系统广播就能看出来,因此我们应用发出的广播,其他应用也是可以收到的。然后就要说一下有序广播:只需要将 sendBroadcast 方法改成sendOrderedBroadcast方法,该方法接受两个参数,第一个参数,仍然是intent,第二个参数是一个与权限相关的字符串(传入null亦可)。此时的广播接收器是有先后顺序的,而且前面的广播接收器还可以将广播截断,以阻止其继续传播。 要在清单文件中注册的时候设定广播接收器的先后顺序,如下 <receiver android:name=".MyBroadcastReceiver" android:enabled="true" android:exported="true"> <intent-filter android:priority="1000"> <action android:name="com.doyoulove.MY_RECEIVER" /> </intent-filter> </receiver> </application>通过android:priority来设置优先级,优先级越高越早接收到广播。如果在广播接收器的onReceive方法中调用了abortBroadcast方法,就表示将这条广播截断,后面的广播接收器将无法接受到这条广播。 温馨提示:不要在广播的onReceive()里面添加过多的逻辑或者耗时操作,因为在广播接收器中是不允许开启线程,当onReceive方法运行较长时间而没有结束,程序就会报错,因此广播接收器更多的是扮演一种打开程序其他组件的角色 比如启动一个服务,创建一条状态栏通知等。
转载请注明原文地址: https://www.6miu.com/read-3827.html

最新回复(0)