BroadCastReciver可以通过对事件的过滤来针对某些外部事件进行接受并做出相应。比如启动一个ACTIVITY或者一个SERVICE来响应它接受到的信息,或者通过NotificationManager来通知用户。
监听广播INTENT的方法:
写一个继承BroadCastReceiver的类,重写onReceive()方法;
注册广播接收者,通过在AndroidManifes.xml文件静态注册:
<receiver android:name=".SMSBroadcastReceiver" > <intent-filter android:priority = "2147483647" > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter></receiver >
或者在代码中动态注册:
IntentFilter intentFilter=new
IntentFilter("android.provider.Telephony.SMS_RECEIVED");registerReceiver(mBatteryInfoReceiver ,intentFilter);//反注册unregisterReceiver(receiver);
生命周期:
生命周期只有10秒左右,如果在onReceive()方法里面做超过10秒的事情,程序就会报ANR(程序无响应)错误。所以如果处理某些时长比较长的工作,则应通过Intent发送给某个Service来处理。不能使用子线程,因为10左右BroadcastReveiver所在的进程可能被kill,所以子线程同样被杀死,是不可靠的。
PS:动态注册中,则Activity结束后 广播也随之失效。而静态注册 则只要设备开启,广播接收器也就开着。及时App没有启动,其所订阅的广播出发时也会对它起作用。