2013-05-13 4 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"

я могу включить его один раз. Но когда я хочу отключить. Ничего не происходит, я не могу отключить его. Он по-прежнему блокирует входящие вызовы.

Мой аппарат Samsung 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

Смежные вопросы