android broadcastReceiver启用禁用

来源:互联网 发布:淘宝宠物医生 编辑:程序博客网 时间:2024/05/02 03:05

有时候我们需要在我们需要启用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);        }@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();unregisterReceiver(mBatteryChangeReceiver);enableBatteryReceiver(false);}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();if(mBatteryChangeReceiver == null){createBatteryChangeReceiver();}registerReceiver(mBatteryChangeReceiver, new IntentFilter(Intent.ACTION_BATTERY_OKAY));enableBatteryReceiver(true);}