基础-4 ANDROID BroadcastReceiver
来源:互联网 发布:sql having where同时 编辑:程序博客网 时间:2024/05/22 03:53
BroadcastReceiver也就是“广播接收者”,它就是用来接收来自系统和应用中的广播。
定义广播接收者的地址,就可以通过地址将广播放送出去到接收者。
自定义一个BroadcastReceiver
public class MyReceiver extends BroadcastReceiver { private static final String TAG = "MyReceiver"; @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("data"); Log.i(TAG, data); }}
广播分静态注册,动态注册
1.静态注册:在AndroidManifest.xml文件中配置
<receiver android:name=".MyReceiver"> <intent-filter> <action android:name="android.intent.action.MyReceiver"></action> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
这种注册是永久的,当广播信息发送来时,应用是关闭状态也会也会调用到该广播接收者。
2.动态注册 通过代码注册,生命周期跟随应用的生命周期。
MyReceiver m= new MyReceiver();IntentFilter ifm = new IntentFilter();ifm.addAction("android.intent.action.MY_RECEIVER");registerReceiver(m,ifm);
在应用关闭是应用解除注册的广播地址,不然会出现异常
unregisterReceiver(m);
广播接收者信息设置完了,我们就可以发送广播了:
Intent i = new Intent("android.intent.action.MyReceiver"); i.putExtra("data", "广播信息"); sendBroadcast(i);
运行后:
12-12 16:42:23.378 27877-27877/com.cn.broadcastreceiver I/MyReceiver: 广播信息
可以给多个广播接收者注册相同的地址,每个广播接收者都可以收到消息,且互不影响,这种为普通广播,还有一种为有序广播,通过设置优先级来传播。
普通广播:
MyReceiver m= new MyReceiver(); IntentFilter ifm = new IntentFilter(); ifm.addAction("android.intent.action.MY_RECEIVER"); registerReceiver(m,ifm); TReceiver t= new TReceiver(); IntentFilter ift = new IntentFilter(); ift.addAction("android.intent.action.MY_RECEIVER"); registerReceiver(t,ift);
12-12 16:55:31.646 4031-4031/com.cn.broadcastreceiver I/MyReceiver: 广播信息12-12 16:55:31.646 4031-4031/com.cn.broadcastreceiver I/TReceiver: 广播信息
有序广播:
在AndroidManifest.xml文件中配置
<receiver android:name=".MyReceiver" **android:priority="1000"**></receiver> <receiver android:name=".TReceiver" **android:priority="999"**></receiver>
android:priority属性,并且依次减小。这个属性的范围在-1000到1000,数值越大,优先级越高。
MyReceiver m= new MyReceiver();IntentFilter ifm = new IntentFilter();ifm.addAction("android.intent.action.MY_RECEIVER");registerReceiver(m,ifm);TReceiver t= new TReceiver();IntentFilter ift = new IntentFilter();ift.addAction("android.intent.action.MY_RECEIVER");registerReceiver(t,ift);Intent i = new Intent("android.intent.action.MY_RECEIVER");i.putExtra("data", "广播信息"); sendOrderedBroadcast(i,"scott.permission.MY_BROADCAST_PERMISSION");
使用sendOrderedBroadcast方法发送有序广播时,需要一个权限参数,如果为null则表示不要求接收者声明指定的权限,如果不为null,则表示接收者若要接收此广播,需声明指定权限。
在AndroidMainfest.xml中定义一个权限:
<permission android:protectionLevel="normal" android:name="scott.permission.MY_BROADCAST_PERMISSION"></permission>
使用该权限:
<uses-permission android:name="scott.permission.MY_BROADCAST_PERMISSION"></uses-permission>
在MyReceiver停止该广播,TReceiver接收不到了。
public class MyReceiver extends BroadcastReceiver { private static final String TAG = "MyReceiver"; @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("data"); Log.i(TAG, data); //停止该广播 abortBroadcast(); }}
12-12 17:04:12.701 11539-11539/com.cn.broadcastreceiver I/MyReceiver: 广播信息
0 0
- 基础-4 ANDROID BroadcastReceiver
- Android基础BroadCastReceiver简介
- Android- BroadCastReceiver 基础学习
- [Android基础]BroadcastReceiver
- Android基础BroadcastReceiver详解
- Android基础--广播BroadcastReceiver
- Android基础----BroadcastReceiver
- android studio BroadcastReceiver基础
- Android基础回顾--BroadcastReceiver
- Android (BroadcastReceiver基础)
- android基础--广播接收者-BroadcastReceiver
- android--service和broadcastReceiver基础
- Android之BroadcastReceiver基础学习
- Android基础--BroadcastReceiver应用详解
- android基础学习之BroadcastReceiver
- <Android 基础(二)> BroadcastReceiver
- Android基础--BroadcastReceiver应用详解
- Android BroadcastReceiver的基础学习
- spring中自定义注解(annotation)与AOP中获取注解
- 第七课 迭代器与泛型for
- 搜狗笔试题目:4*5的棋盘,在左下角的格子移动到右上角的格子,求有多少种移动方法
- map 二维映射 简单版 解决问题 51nod 1425
- Java获取汉字拼音和拼音缩写
- 基础-4 ANDROID BroadcastReceiver
- SpringMVC 部署项目静态资源文件访问问题
- startssl免费证书申请
- IntelliJ Idea快捷键总结
- PostgreSQL用户角色及其属性介绍
- AppModule根模块
- 简单句的补充
- 第三方支付宝的集成
- IC前端面试问题总结