国内目前最全面的介绍——Android中的BroadCastReceiver
?
?
?BroadCastReceiver简介(末尾有源码)public class MyBroadcastReceiver extends BroadcastReceiver {
?
??? // action名称
??? String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
?
??? public void onReceive(Context context, Intent intent) {
?
?????? if (intent.getAction().equals(SMS_RECEIVED)) {
?????????? // 相关处理:地域变换、电量不足、来电来信;
?????? }
??? }
<receiver android:name=".MyBroadcastReceiver">
?????????? <intent-filter android:priority="1000">
?????????? ??
<action android:name=" android.provider.Telephony.SMS_RECEIVED"/>
?????????? </intent-filter>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
// 广播接收者-广播的接收
private BroadcastReceiver myBroadcastReceiver = newBroadcastReceiver() {
?
?????? @Override
?????? public void onReceive(Context context, Intent intent) {
?????????? //相关处理,如收短信,监听电量变化信息
?????? }
?
IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED ");
异步广播, 当处理完之后的Intent,依然存在,这时候registerReceiver(BroadcastReceiver,IntentFilter)还能收到他的值,直到你把它去掉,不能将处理结果传给下一个接收者,无法终止广播.
sendBroadcast(intent);
?
Intent intent = new Intent("cn.lenovo.yangguangf");
<receiver android:name=".MyBroadcastReceiver">
?????????? <intent-filter android:priority="1000">
?????????? ??
<action android:name="cn.lenovo.yangguangfu"/>
</intent-filter>
3,在android系统中只要监听该广播的接收者,都能够收到sendBroadcast(intent)发出的广播;
???
有序广播的发送和接收:sendOrderedBroadcast(intent,receiverPermission);
sendOrderedBroadcast(intent,receiverPermission, resultReceiver,
receiverPermission这是权限,一个接收器必须持以接收您的广播。如果为null,不经许可的要求。
resultReceiver您自己BroadcastReceiver来当作最后的广播接收器。
调度自定义处理程序,用以安排resultReceiver回调;如果为null将语境中的主线程举行。
initialCode一种结果代码的初始值。通常为Activity.RESULT_OK。这个值是-1;为其他int型 也可以,如0,1,2;
initialData一种结果数据的初始值。通常情况下为空,是String类型;
initialExtras一种结果额外的初始值。通常情况下为空,是Bundle;
?
sendStickyBroadcast(intent);
当处理完之后的Intent,依然存在,直到你把它去掉。
发这个广播需要权限<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
去掉是用这个方法removeStickyBroadcast(intent);但别忘了在执行这个方法的应用里面AndroidManifest.xml同样要加上面的权限;
?
?
sendStickyOrderedBroadcast(intent,resultReceiver, scheduler,
?????? initialCode, initialData,initialExtras)
这个方法具有有序广播的特性也有异步广播的特性;
?
发送这个广播要:<uses-permissionandroid:name="android.permission.BROADCAST_STICKY" />这个权限。才能使用这个方法。如果您并不拥有该权限,将抛出SecurityException的。
?
<receiver android:name=".MyBroadcastReceiver">
?????????? <intent-filter android:priority="900">
?????????? ??
????????????? <action android:name="cn.lenovo.yangguangfu"/>
?????????? </intent-filter>
//代码中注销广播
?
// sendBroadcast(intent);
// sendBroadcast(intent,receiverPermission);
//sendOrderedBroadcast(intent, receiverPermission);
//sendStickyOrderedBroadcast(intent, resultReceiver, scheduler,
// initialCode, initialData,initialExtras)
//sendOrderedBroadcast(intent, receiverPermission, resultReceiver,
得到由
sendStickyOrderedBroadcast(intent,resultReceiver, scheduler,
// initialCode, initialData,initialExtras);
?
//sendOrderedBroadcast(intent, receiverPermission, resultReceiver,
sendStickyOrderedBroadcast(intent,resultReceiver, scheduler,
?initialCode, initialData, initialExtras)