相比较VIsibleFragment的mOnShowNotification内部类对象,
同时PollService一发送完就被内存回收了所以broadIntent也可能会被内存回收,这样就不能采用动态注册的方式,必须静态注册同时
NotificationReceiver是接收其他receiver的消息所以必须权限设置最低。
<receiver android:name=".NotificationReceiver"
android:exported="false">
<intent-filter
android:priority="-999">
<action android:name="com.bignerdranch.android.photogallery.SHOW_NOTIFICATION" />
</intent-filter>
</receiver>
有序化的广播接收会在receiver之间相互通信也会有receiver回复消息给sender,这里mShowNotification setResultCode cancel
NotificationReceiver接收并处理 效果是让notification消失不见。
StartupReceiver也是静态注册 监听系统boot completed
<receiver android:name=".StartupReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
android broadcast动态注册
1)在发送端定义broadcast intent ID
public static final String Intent_ID = "com.bignerdranch.android.photogallery.SHOW_NOTIFICATION";
发送此intent
sendBroadcast(new Intent(filter));
或者用 Context.sendOrderedBroadcast(Intent,String,BroadcastReceiver,Handler,int,String,Bundle)
2)实例化receiver
写一个继承BroadCastReceiver的类,重写onReceive()方法,广播接收器仅在它执行这个方法时处于活跃状态。
当onReceive()返回后,它即为失活状态。
3)注册广播
动态注册:
IntentFilter filter=new IntentFilter(Intent_ID);
Context.registerReceiver(receiver,filter);
静态注册 :
即在xml文件中注册。适用于监听系统自带的事件做出响应,或者orderedBroadcast 中权限最低的receiver。
eg:
<receiver android:name=".SMSBroadcastReceiver" >
<intent-filter android:priority = "2147483647" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver >
Android 广播注册方式
最新推荐文章于 2024-10-31 14:15:44 发布