Android中的广播机制(二)----- 发送广播
来源:互联网 发布:cg制作软件 编辑:程序博客网 时间:2024/04/27 15:09
这一篇中我们将介绍发送标准广播,有序广播和本地广播的使用。
一、 发送标准有序广播
1 . 定义一个广播接收器(静态注册)。新建类继承自BroadcastReceiver,同时在AndroidManifest.xml文件中对广播进行注册。
public class MyBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Receiver", Toast.LENGTH_SHORT).show(); }}
在AndroidManifest.xml文件中添加如下代码:
<receiver android:name=".receiver.MyBroadcastReceiver"> <intent-filter> <action android:name="com.codekong.broadcastreceiver"/> </intent-filter> </receiver>
2 . 构建要发送的广播,并发送。(此处通过点击按钮来触发发送广播)
Button btnSend = (Button) findViewById(R.id.btn_send); btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.codekong.broadcastreceiver"); //发送标准广播 sendBroadcast(intent); } });
可以看出,我们是通过构造一个隐式intent,然后调用sendBroadcast()方法来发出一条标准广播。
注意:此处构建的Intent中的内容,要和AndroidManifest中静态注册的receiver中的action的值保持一致,这样才能接收到发出的广播。
二、 发送有序广播
发送标准广播使用sendBroadcast()方法,发送有序广播使用sendOrderBroadcast(intent, null)方法。
为了确定哪个应用程序先收到广播,我们还需要规定优先级,在AndroidManifest.xml文件中,修改receiver的优先级(此处设置为100)。
<receiver android:name=".receiver.MyBroadcastReceiver"> <intent-filter android:priority="100"> <action android:name="com.codekong.broadcastreceiver"/> </intent-filter> </receiver>
由于是有序广播,我们还可以在收到广播后截断广播,使其终止传递。
截断广播使用abortBroadcast()方法。
三、 使用本地广播
前面我们学习的广播都是系统全局广播,发出的广播,其他应用程序也可以接收到为了解决广播的安全性问题,我们引入了本地广播机制,使用该机制发出的广播只会在应用程序内部传播,而且广播接收器也只会接受来自本应用程序的广播。
1 . 新建内部类继承自BroadcastReceiver实现广播接收器,并重写其中的方法。
class LocalReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Receiver", Toast.LENGTH_SHORT).show(); } }
2 . 获得本地广播管理器实例
//获取到实例 localBroadcastManager =LocalBroadcastManager.getInstance(this);
3 . 构建intent,发送广播
Button btnSend = (Button) findViewById(R.id.btn_send); btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.codekong.LOCAL_BROADCAST"); localBroadcastManager.sendBroadcast(intent); } });
4 . 动态注册本地广播监听器。
IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.codekong.LOCAL_BROADCAST"); localReceiver = new LocalReceiver(); localBroadcastManager.registerReceiver(localReceiver, intentFilter);
5 . 在onDestroy()方法中取消注册的广播。
localBroadcastManager.unregisterReceiver(localReceiver);
注:本地广播是无法通过静态注册的方方法来接收的,因为静态注册主要是为了可以在不启动程序的前提下也能接受到广播,而本地广播只能在应用程序内部进行广播。
- Android中的广播机制(二)----- 发送广播
- Android广播发送机制剖析【android广播系列二】
- Android广播之发送自定义广播+本地广播(二)
- Android深入浅出系列之广播机制—Android中的广播机制(二)
- android 广播机制二
- Android 广播机制(二
- Android广播机制二
- Android 中的广播机制
- Android中的广播机制
- android中的广播机制
- android中的广播机制
- Android中的广播机制
- android中的广播机制
- Android中的广播机制
- Android中的广播机制
- 广播机制(二)
- Android中的广播机制(一)----- 接收广播
- day04 Android中的广播机制(广播接收器)
- junit下不同路径下的配置文件
- iptables配置FTP的主动和被动模式
- xCode 使用快捷键b
- 英国脱欧?值得祝贺
- web.xml文件的作用----接上面的那个,看的多了,也就知道的差不多了
- Android中的广播机制(二)----- 发送广播
- Android setContentView 加载布局源码解析
- C语言基础 switch与enum类型配合使用
- cocos2dx-3.10 开发初探(一)
- Unity中的Path对应各平台中的Path
- 第三方QQ登录示例
- Linux的命令及全称
- 编写代码,演示多个字符从两端移动,向中间汇聚。
- C语言基础 检验输入的字符是不是字母