BroadcastReceiver 广播接收器
广播接收器,主要是用于app注册一些指定事件的广播接收器,系统在这些事件被触发的时候,会通知到注册的广播接收器,然后广播接收器在onReceive函数中对接收到的通知进行处理;
广播接收器的两种注册方式:
静态注册:
<receiver android:name=".SMSBroadcastReceiver" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver >
动态注册:
IntentFilter intentFilter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(mSmsBroadcastReceiver ,intentFilter);
//解注册
unregisterReceiver(receiver);
BroadcastReceiver的生命周期
创建 BroadcastReceiver对象 -> onReceive -> 对象调用结束;
Broadcast的onReceive一般调用最长时间为10秒(也有可能更短),如果超过10秒,就很有可能被系统给结束掉;所以一些耗时的任务,我们需要发给Service来进行处理;
(当初写的一个简单的短信自动回复的app,在onReceive里面创建了一个线程,并且将处理回复的任务交给这个线程处理,后来发现经常没有回复短信,到后来才知道BroadcastReceiver有这个限制)
其他广播接收
广播接收器另外的注册方法:
private void registerScreenActionReceiver(){
final IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
registerReceiver(receiver, filter);
}
private BroadcastReceiver receiver = new BroadcastReceiver(){
@Override
public void onReceive(final Context context, final Intent intent) {
// Do your action here
}
}
通过一个IntentFilter,将对应的Action加进去,然后进行注册;上面是注册屏幕锁定和解锁的广播接收器注册;receiver 是一个 Broadcast的匿名类实现;
开关机事件Action,可以在Manifest.xml里面,增加该Action对应的广播接收器配置
<action android:name="android.intent.action.BOOT_COMPLETED" /> 开机启动完毕
<action android:name="android.intent.action.ACTION_SHUTDOWN" /> 关机
android.intent.action.BATTERY_CHANGED 电量变化(电量变化可以在registerReceiver时候,返回的Intent中获取电量信息)
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 网络状态变化
需要权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.BATTERY_STATS"/>
还有其他的广播接收器使用,需要在以后的学习中慢慢整理出来;
原文:http://www.cnblogs.com/coldforce/p/4976046.html