【问题标题】:Cannot Disable Broadcast Receiver无法禁用广播接收器
【发布时间】:2013-05-13 13:06:37
【问题描述】:

我从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" 部署时

我可以启用一次。但是当我想禁用时。没有任何反应,我无法禁用它。它仍然是阻止来电。

我的设备是搭载 Android 2.3.3 的三星 Galaxy S2

有什么帮助吗?谢谢

【问题讨论】:

    标签: android broadcastreceiver


    【解决方案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);
    

    【讨论】:

    • 感谢您的解决方案。我会试试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多