有时候我们需要在我们需要启用receiver的时候启用,不需要的时候就不想让代码去执行receiver里面的函数方法。
两种receiver,现在只看静态注册的receiver。因为动态注册的receiver更加容易的控制。
两点注意事项:
1,AndroidManifest文件中注册receiver时,默认receiver为禁用状态。android:enabled="false"
<receiver android:name=".BatteryReceiver" android:enabled="false">
<intent-filter >
<action android:name="android.intent.action.BATTERY_LOW"/>
</intent-filter>
<intent-filter >
<action android:name="android.intent.action.BATTERY_OKEY"/>
</intent-filter>
<intent-filter >
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
</intent-filter>
<intent-filter >
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
2,在需要的时候将receiver启用,不需要时禁用。例如下面code,我们只有在本activity可见的界面启用,不可见界面禁用。
private void enableBatteryReceiver(boolean enabled){
PackageManager pm = getPackageManager();
ComponentName receiverName = new ComponentName(this,BatteryReceiver.class);
int newState = enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED:PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
pm.setComponentEnabledSetting(receiverName, newState, PackageManager.DONT_KILL_APP);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
unregisterReceiver(mBatteryChangeReceiver);
enableBatteryReceiver(false);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if(mBatteryChangeReceiver == null){
createBatteryChangeReceiver();
}
registerReceiver(mBatteryChangeReceiver, new IntentFilter(Intent.ACTION_BATTERY_OKAY));
enableBatteryReceiver(true);
}