赞
踩
有时候我们需要在我们需要启用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);
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。