Android 广播接收器BroadcastReceiver(五)
来源:互联网 发布:免费本地记账软件 编辑:程序博客网 时间:2024/04/28 02:17
这节课学习广播的优先级问题。假如两个广播接收器监听同一个广播,会出现什么样的问题呢?新建一个工程测试下。创建两个广播接收器,代码如下:
public class FirstReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Log.i("info", "FirstReceiver 收到消息"); }}public class SecondReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Log.i("info", "SecondeReceiver 收到消息"); }}
注册时,监听同一个广播
<receiver android:name="com.example.priorityreceiver.FirstReceiver" > <intent-filter> <action android:name="com.example.priorityreceiver.MY_BROADCAST" /> </intent-filter> </receiver> <receiver android:name="com.example.priorityreceiver.SecondReceiver" > <intent-filter> <action android:name="com.example.priorityreceiver.MY_BROADCAST" /> </intent-filter> </receiver>
在主程序中添加广播发送按钮。
Button button = (Button) findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent( "com.example.priorityreceiver.MY_BROADCAST"); sendBroadcast(intent); }});
点击发送按钮,查看Logcat:
现在有一个问题,某个程序需要第二个接收器要先接收到消息,这该怎么办呢,这就要用到广播的优先级。在第二个广播接收器的注册代码中修改如下:
<receiver android:name="com.example.priorityreceiver.SecondReceiver" > <intent-filter android:priority="100" > <action android:name="com.example.priorityreceiver.MY_BROADCAST" /> </intent-filter></receiver>
android:priority=”100”代表优先级的高低,默认优先级为0;重新运行程序点击发送按钮,查看Logcat:
可以看到第二个接收器就先接到消息了。同时,假如第二个接收器接到了广播,不想要第一个接收器再接收了该怎么办了?就像boss在群里说谁去给我打杯水,同事A去做了,同事B就不用去做了。Android提供了一个函数abortBroadcast();来阻断广播,在第二个广播接收器中添加这个函数,代码如下:
public class SecondReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Log.i("info", "SecondeReceiver 收到消息"); abortBroadcast(); }}
重新运行程序,查看Logcat:
第一个接收器还是收到了广播,而且系统还发出了提示信息。可见标准广播是无法阻断,假如要用到阻断该怎么办呢?修改发送的广播类型为有序广播,代码如下:
Intent intent = new Intent( "com.example.priorityreceiver.MY_BROADCAST");sendOrderedBroadcast(intent, null);
重新运行程序,查看Logcat:
这样目的就达到了。
项目地址:明天更新
心记不如淡墨,哈哈。
0 0
- Android 广播接收器BroadcastReceiver(五)
- BroadCastReceiver android 广播接收器
- Android 广播接收器BroadcastReceiver
- android-----BroadcastReceiver广播接收器
- Android-BroadcastReceiver广播接收器
- Android 广播接收器(BroadcastReceiver)
- android BroadcastReceiver(广播接收器)【转载】
- Android-(广播接收器)BroadcastReceiver-2
- Android BroadcastReceiver广播接收器详解
- Android 广播接收器BroadcastReceiver(一)
- Android 广播接收器BroadcastReceiver(二)
- Android 广播接收器BroadcastReceiver(三)
- Android 广播接收器BroadcastReceiver(四)
- Android 广播接收器BroadcastReceiver(六)
- Android广播接收器(BroadcastReceiver)
- Android之BroadcastReceiver(Android中的广播接收器)
- Android基础知识--10.Android广播接收器BroadcastReceiver
- Android基础-broadcastreceiver(广播接收器)
- QQ分享的图标文字标题设置
- android 打开各种文件(setDataAndType)
- 飞机游戏2
- 问题:Tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误
- Kafka学习笔记-Flume整合Kafka整合SparkStreaming
- Android 广播接收器BroadcastReceiver(五)
- openwrt minidlna config
- php导出CSV时,超长数字精度丢失问题与前导0的字符串丢失0的问题解决
- ul与li的使用
- 树:AVL树
- 修改Oracle RAC集群IP地址一例
- VTK-6.3.0编译(支持Qt编程)以及QVTKwidget插件安装
- systemd取代 system V init
- robotium简单使用