2013-05-13 94 views
1

我从here得到禁用/启用广播接收器的逻辑。无法禁用广播接收器

@Override 
    public void onCheckedChanged(CompoundButton v, boolean checked) { 
     // TODO Auto-generated method stub 

     if (v == disableBlock) { 
      manageBlockSetting(checked); 
     } 
    } 

private void manageBlockSetting(boolean disable) { 
     Log.e(tag, "Disable : " + disable); 
     int flag = disable ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED 
       : PackageManager.COMPONENT_ENABLED_STATE_ENABLED; 
     ComponentName component = new ComponentName(SettingActivity.this, PhoneCallReceiver.class); 

     getApplication().getPackageManager().setComponentEnabledSetting(component, flag, PackageManager.DONT_KILL_APP); 
     editSharedPreferences(StoreConstantValue.SETTING_DISABLE_BLOCK, disable); 
} 

而在的Manifest.xml

<receiver android:name="com.vsmart.unocaller.blockingservice.PhoneCallReceiver" 
      android:enabled="true" > 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
     </receiver> 

当我与android:enabled="false"

部署我可以再启用它。但是,当我想禁用。什么都没有发生,我无法禁用它。它仍然阻止来电。

我的设备是三星Galaxy S2采用Android 2.3.3

任何帮助吗?谢谢

回答

1

而不是在清单中声明接收器,你可以尝试从代码注册/取消注册。例如

private class MyPhoneStateListener extends PhoneStateListener { 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     super.onCallStateChanged(state, incomingNumber); 

    } 
} 


private MyPhoneStateListener phoneStateListener = new MyPhoneStateListener(); 

要启用

 telephonyManager.listen(phoneStateListener, LISTEN_CALL_STATE); 

并禁用

telephonyManager.listen(phoneStateListener, 
      PhoneStateListener.LISTEN_NONE); 

其中

 TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
+0

谢谢,您的解决方案。我会尝试。 – SaintTail 2013-05-14 04:49:41