android BroadcastReceiver(二)
来源:互联网 发布:苹果免费下载软件 编辑:程序博客网 时间:2024/05/16 10:05
普通广播(Normal Broadcast)
概念:普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。(PS:就像说出去的话,别人都能听到~~~你也不能反悔,普通广播也有点这种意思。。。)
实现:
1、接收者,三个为例,如:
public class FirstReceiver extends BroadcastReceiver { private static final String TAG = "hq"; @Override public void onReceive(Context context, Intent intent) { String msg = intent.getStringExtra("msg"); Log.i(TAG, "普通广播 FirstReceiver: " + msg +"----"+System.currentTimeMillis()); } }
2、注册广播
firstReceiver = new FirstReceiver(); secondReceiver = new SecondReceiver(); thirdReceiver = new ThirdReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.MY_INORDER_BROADCAST"); registerReceiver(firstReceiver, filter); registerReceiver(secondReceiver, filter); registerReceiver(thirdReceiver, filter);
3、发送广播
android.intent.action.MY_INORDER_BROADCAST:自己定义的广播地址,先把它当成简单的字符串吧,要和接收广播地址相同,才能收到
Intent intent = new Intent("android.intent.action.MY_INORDER_BROADCAST"); intent.putExtra("msg", "学习中=="); sendBroadcast(intent, "scott.permission.MY_BROADCAST_PERMISSION");
4、结果
5、验证取消广播实验:在接收者中取消。(注:普通广播是无法取消的!)
public class FirstReceiver extends BroadcastReceiver { private static final String TAG = "hq"; @Override public void onReceive(Context context, Intent intent) { String msg = intent.getStringExtra("msg"); abortBroadcast(); Log.i(TAG, "普通广播 FirstReceiver: " + msg +"----"+System.currentTimeMillis()); } }
再次发送广播
Intent intent = new Intent("android.intent.action.MY_INORDER_BROADCAST"); intent.putExtra("msg", "学习中=="); sendOrderedBroadcast(intent, "scott.permission.MY_BROADCAST_PERMISSION");
结果:
WHY?
怎么只显示一条广播的?预测中是三条都显示得。。。这时候才发现,原来命令发错了。。。是sendBroadcast,我写成了sendOrderedBroadcast。。。不过也验证了有序广播是可以取消的~~~
备注:有序广播需要加权限:
有序广播
实现:
1、接收者
public class FirstReceiver extends BroadcastReceiver { private static final String TAG = "hq"; @Override public void onReceive(Context context, Intent intent) { String msg = intent.getStringExtra("msg"); Log.i(TAG, "有序广播 FirstReceiver: " + msg); Bundle bundle = new Bundle(); //接收到消息后,对其编辑重新发送出去 bundle.putString("msg", msg + "被FirstReceiver编辑过-"); setResultExtras(bundle); } }
public class SecondReceiver extends BroadcastReceiver { private static final String TAG = "hq"; @Override public void onReceive(Context context, Intent intent) { String msg = getResultExtras(true).getString("msg"); Log.i(TAG, "有序广播 SecondReceiver: " + msg); Bundle bundle = new Bundle(); bundle.putString("msg", msg + "被SecondReceiver编辑过-"); setResultExtras(bundle); // abortBroadcast(); //添加这句receiver3就接收不到 }}
public class ThirdReceiver extends BroadcastReceiver { private static final String TAG = "hq"; @Override public void onReceive(Context context, Intent intent) { String msg = getResultExtras(true).getString("msg"); Log.i(TAG, "有序广播 ThirdReceiver: " + msg); } }
2、注册广播
<receiver android:name="com.hq.demo.order.disorder.FirstReceiver" > <intent-filter android:priority="1000" > <action android:name="android.intent.action.MY_ORDER_BROADCAST" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <receiver android:name="com.hq.demo.order.disorder.SecondReceiver" > <intent-filter android:priority="999" > <action android:name="android.intent.action.MY_ORDER_BROADCAST" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver><receiver android:name ="com.hq.demo.order.disorder.ThirdReceiver" > <intent-filter android:priority="997" > <action android:name="android.intent.action.MY_ORDER_BROADCAST" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
3、发送广播
Intent intent = new Intent("android.intent.action.MY_ORDER_BROADCAST"); intent.putExtra("msg", "消息."); sendOrderedBroadcast(intent, "scott.permission.MY_BROADCAST_PERMISSION");
4、结果:
5、有序广播终止,例:在SecondReceiver 添加abortBroadcast();ThirdReceiver 就接收不到消息了。
0 0
- android BroadcastReceiver(二)
- <Android 基础(二)> BroadcastReceiver
- Android 广播接收器BroadcastReceiver(二)
- Android四大组件(二) BroadcastReceiver
- Android开发之BroadcastReceiver(二)
- Android学习笔记之二十 BroadcastReceiver
- Android 四大组件学习之BroadcastReceiver二
- BroadcastReceiver(二)
- Android:BroadcastReceiver
- android BroadcastReceiver
- Android BroadcastReceiver
- BroadcastReceiver Android
- Android BroadcastReceiver
- android BroadcastReceiver
- Android BroadCastReceiver
- Android BroadcastReceiver
- Android BroadcastReceiver
- android BroadcastReceiver
- android错误:Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
- Android 中在4.0上显示gif图片
- Fedora21在桌面显示应用软件图标
- java学习之集合框架
- 数据结构与算法分析(c++版) #1
- android BroadcastReceiver(二)
- Cloud Insight 仪表盘上线 | 全面监控 Redis
- 刚开通博客
- javascript面试题之null和undefined的区别
- Android 避免APP启动闪黑屏的解决办法(Theme和Style)
- 柱状图
- ubuntu 初级学习
- ss在ubuntu下firefox上网
- Dt大数据梦工厂王家林老师 Scala实战详解之第16讲 Scala中包的定义、包对象、包的引用、包的隐式引用