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); 
} 

그리고

<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"

로 배포 Manifest.xml

에서

. 그러나 나는 무능하게하고 싶다. 아무 일도 일어나지 않고 사용할 수 없습니다. 그것은 여전히 ​​블록 들어오는 호출입니다.

내 장치는 안드로이드 2.3.3

어떤 도움 삼성 갤럭시 S2입니까? 감사합니다

답변

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

관련 문제