2013-05-13 90 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