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