Android 发送自定义广播
16lz
2021-01-23
在发送广播之前,我们还需要先定义一个广播接收器来准备接收这个广播,因此新建一个MyBroadcastReceiver,如下:
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.w("MyBroadcastReceiver","reecived MyBroadcastReceiver"); }}
当接收到自定义广播的时候,就会打印这条log,然后就要在清单文件中对这个广播接收器进行修改:
上面的 广播接收器是 静态注册的,与自定义广播接受者非常类似,不要忘了注意权限的问题 可以看到,这里让 MyBroadcastReceiver接收一条名为 "com.doyoulove.MY_RECEIVER" 的广播,所以发送广播时,我们就需要发送这样的一条广播。 可以将发送广播添加到某一个按钮之类的点击事件中,
Intent intent=new Intent("com.doyoulove.MY_RECEIVER"); sendBroadcast(intent);
这样所有监听这条广播的广播接收者都会收到消息,此时发出去的广播就是一条标准广播。同时可以在intent中携带一些数据传递给广播接收者。 广播是一种可以跨进程的通信方式,这一点从接收系统广播就能看出来,因此我们应用发出的广播,其他应用也是可以收到的。
然后就要说一下有序广播:
只需要将 sendBroadcast 方法改成sendOrderedBroadcast方法,该方法接受两个参数,第一个参数,仍然是intent,第二个参数是一个与权限相关的字符串(传入null亦可)。此时的广播接收器是有先后顺序的,而且前面的广播接收器还可以将广播截断,以阻止其继续传播。
要在清单文件中注册的时候设定广播接收器的先后顺序,如下
通过android:priority来设置优先级,优先级越高越早接收到广播。如果在广播接收器的onReceive方法中调用了abortBroadcast方法,就表示将这条广播截断,后面的广播接收器将无法接受到这条广播。
温馨提示:不要在广播的onReceive()里面添加过多的逻辑或者耗时操作,因为在广播接收器中是不允许开启线程,当onReceive方法运行较长时间而没有结束,程序就会报错,因此广播接收器更多的是扮演一种打开程序其他组件的角色 比如启动一个服务,创建一条状态栏通知等。 更多相关文章
- GPS开发常用方法和Criteria确定android location providerGPS
- 通过ddmlib杀死某个android进程的方法
- Android之 inflate() 方法总结
- Android读取服务器图片的三种方法
- android播放本地工程里的音乐和视频的方法
- ActionBar的一些使用方法
- H5调用原生APP的js方法
- Android屏蔽EditText软键盘的方法
- Android获取屏幕尺寸的方法