BroadcastReceive知识模块
BroadcastReceive注册
静态注册
在清单文件通过标签注册是常驻型,也就是说即便当前的应用程序关闭后,如果信息广播来,程序也会被系统自动调用。
代码展示
<receiver android:name=".DataChangeReceive">
<intent-filter>
<action android:name="android.intent.action.DATE_CHANGED"/>
</intent-filter>
</receiver>
监听日期变更的广播。
动态注册
动态注册,又称为代码注册。它不是常驻型广播,也就是说广播会随着程序的生成而生成。一旦代码所在的进程被杀死,广播接收者就会失效。
注意:在代码中进行注册后,一定要在活动结束时取消注册。
代码展示
接收一条ACTION_DATE_CHANGED广播。
receive = new DataChangeReceive();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_DATE_CHANGED);
//注册广播
registerReceiver(receive, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receive);
}
无序广播
特点
无序广播不可以被拦截
所有接收无序广播的接收机都可以同时接收该广播(即便是在不同的应用APP中)
无序广播不可以传递数据
无序广播是使用sendBroadcast方法来进行发送
无序广播可以通过设置发送权限和接收权限来进行一定的筛选
发送权限的使用
场景:当发送者 不希望所有人都接收到此广播时,可以通过设置发送权限来控制
1.在清单文件中声明权限标签声明自定义权限
2.在发送广播时 调用sendBroadcast 两个参数的方法 将权限设置为第二个参数
3.为需要接收广播的应用添加对应的权限
<uses-permission android:name="...."/>
代码示例
发送端
在Java文件中
private String action = "com.example.openWithMusic.broad";
private String permission ="com.example.openWithMusic.MyPermission";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
intent.setAction(action);
sendBroadcast(intent, permission);
在清单文件中
//声明自定义权限
<permission android:name="com.example.openWithMusic.MyPermission"/>
接收广播的应用
在清单文件中进行声明
<uses-permission android:name="com.example.openWithMusic.MyPermission"/>
接收权限
当 接收者 不需要接收所有同名的广播时 可以通过添加接收者权限来进行控制
1.在清单文件中声明权限标签声明自定义权限
2.在标签上 添加相应的权限
3.为需要发送广播的应用 添加对应的权限
代码示例
接收端
<permission android:name="com.example.openWithMusic.ReceiverPermission"/>
<receiver android:name=".UserPersenterReceiver"
android:permission="com.example.openWithMusic.ReceiverPermission">
发送端
<uses-permission android:name="com.example.openWithMusic.ReceiverPermission"/>
有序广播
特点
1.接收者将按预先声明的优先级依次接收Broadcast。如:A的级别高于 B,B的级别高于C。那么,Broadcast先传给A,再传给B,最后传给C。
2.优先级声明在<intent-filter android:priority=“100”./>元素的android:priority属性中,数越大优先级别越高,取值范围为-1000~1000,优先级也可以调用IntentFilter对象的setPriority()进行设置。
3.有序广播可以被拦截。接收者可以终止Broadcast Intent的传播,Broadcast Intent的传播一旦终止,后面的接收者就无法接收到Broadcast。使用abortBroadcast()方法。
4.有序广播可以接收数据接收者可以将数据传递给下一个接收者,
getResultExtra(true)来获取bundler对象,并对其所包含的数据进行修改操作
如:A得到Broadcast后,可以往它的结果对象中存入数据,当Broadcast传给B时,
如:A得到Broadcast后,可以往它的结果对象中存入数据,当Broadcast传给B时,B可以从A的结果对象中得到A存入的数据。
5.使用sendOederdBroadcast方法来发送
//第一个参数 Intent 意图对象
Intent intent = new Intent("com.barry.tryBroadcast");
//第2个参数 接收者需要的权限 String类型
//第3个参数 BroadcastReceiver 最终接收者.这个接收机一定会接收到广播
// 如果之前被拦截了,则只接受一次,否则会有两次接收
//第4个参数 Handler 用于执行接收者的回调, 如果为null 则说明是在主线程中执行
//第5个参数 int类型 结果码 resultCode
//第6个参数 String类型 结果字符集 resultData 可通过getResultData() 来获取。
// setResultData(Sting s) 来更新
//第七个参数 Bundle 用于传输其他类型的数据
// 在接收机的onReceive方法中,调用getResultExtras(true),来获取发送的bundle对象。
Bundle bundle= new Bundle();
bundle.putString("data", "hdjlksjf");
sendOrderedBroadcast(intent,null, null,null,RESULT_OK,
"广播已被接收",bundle);
本文地址:https://blog.csdn.net/Barryjacket/article/details/108628313
下一篇: outlook两个账号怎么分开存储邮件?
推荐阅读
-
电路图的知识
-
C盘巨大的文件是什么文件 系统知识介绍
-
什么是操作系统?操作系统知识介绍
-
python模块介绍- argparse:命令行选项及参数解析
-
Python进阶(一)——安装Python、程序执行、Python模块和IDLE调试
-
python模块介绍- binascii:二进制和ASCII互转 以及其他进制转换
-
Word高手必备知识格式刷、页眉横线、双面打印快速操作
-
安装完torch geometric,import torch_geometric然后报错:OSError: [WinError 127] 找不到指定的模块
-
Python3中类、模块、错误与异常、文件的简易教程
-
Word表格调整的一些知识技巧让你事半功倍