BroadcastReceiver的静态注册和动态注册
注册广播的方式
1.动态注册(在*.java代码中注册)
2.静态注册(在AndroidManifest.xml中注册receiver)
例:动态注册,监听网络变化
MainActivity.java
1. 声明两个数据成员
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;
2.在onCreate方法里注册广播
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); //要监听的广播(网络变化)
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver, intentFilter); //注册
3.重写MainActivity的onDestory方法,取消注册
@Override
protected void onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(networkChangeReceiver); //取消注册
}
4.创建一个内部类NetworkChangeReceiver继承广播接收器BroadcastReceiver
class NetworkChangeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectionManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
if(networkInfo!=null && networkInfo.isAvailable()){
Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show();
}
}
}
5.在AndroidManifest.xml内加入查看系统网络状态的权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
6.运行程序,在打开或关闭网络时就会有相应提示,即使按下Home键,打开其他应用也能检测到网络状态变化并发送广播(但如果按返回键则不行,返回会自动调用onDestroy方法取消注册的广播。)
例:静态注册,实现开机启动
1.新建类继承BroadcastReceiver,重写onReceive方法
public class BootCompleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Boot Complete", Toast.LENGTH_LONG).show);
}
}
2.在AndroidManifest中声明开机启动权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
3.在AndroidManifest中静态注册广播接收器
<receiver android:name=".BootCompleteReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
4.把程序安装在手机上,重启手机后,就会看到发出的广播”Boot Complete”