Android 禁用广播接收器

Android 禁用广播接收器,android,broadcastreceiver,Android,Broadcastreceiver,我正在尝试为PhoneStateListener添加广播接收器。我已经在舱单上声明了接收人 <receiver android:name="my.pckname.receiver.IncomingCallReceiver" android:enabled="false" > <intent-filter> <action android:name="android.intent.action.P

我正在尝试为PhoneStateListener添加广播接收器。我已经在舱单上声明了接收人

<receiver
        android:name="my.pckname.receiver.IncomingCallReceiver"
        android:enabled="false" >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>
注意:在我发布这个问题之前,我尝试了类似的解决方案 ,但它对我不起作用

编辑:如果我使用0而不是PackageManager.DONT_KILL_应用程序,它会工作,但会关闭应用程序


提前感谢。

我认为您的错误在于接收器的创建-类名应该是实现该组件的pkg内部的类名。。所以,在你的情况下,它必须是简单的


我通常在这个方法上使用另一种形式,向它传递一个类-

我的解决方案是在java代码中注册和取消注册listener IncomingCallReceiver。 接收者可以通过Android清单文件注册。您还可以在运行时通过Context.registerReceiver和Context.unregisterReceiver方法注册和注销接收器。
您可以在

中看到示例我认为ComponentName不是问题,因为我能够启用接收器,禁用接收器是我的问题。我也尝试过传递上下文和cls名称,但仍然存在相同的问题。
<PreferenceCategory android:title="Title here" >
    <CheckBoxPreference
        android:key="allow_calls_from_circle"
        android:summary="Summary here"
        android:title="This a title" />

    <EditTextPreference
        android:dialogTitle="Title here"
        android:key="default_sms_body"
        android:summary="Summary here"
        android:title="Title here"
        android:dependency="allow_calls_from_circle" 
       />
</PreferenceCategory>
public class Settings extends SherlockPreferenceActivity implements
 OnPreferenceClickListener {

private static final String TAG = Settings.class.getSimpleName();

CheckBoxPreference allowCallsFromCircle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // deprecated no replacement API level below 13
    addPreferencesFromResource(R.xml.settings);

    allowCallsFromCircle = (CheckBoxPreference) findPreference("allow_calls_from_circle");
    allowCallsFromCircle.setOnPreferenceClickListener(this);
}


@Override
public boolean onPreferenceClick(Preference preference) {
    Log.d(TAG, "onPreferenceClick");

    ComponentName component = new ComponentName(getBaseContext(),
            IncomingCallReceiver.class);
    int status = getPackageManager().getComponentEnabledSetting(component);
    Log.d(TAG, "status" + status);

    if ((status == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT && allowCallsFromCircle
            .isChecked())
            || (status == PackageManager.COMPONENT_ENABLED_STATE_DISABLED && allowCallsFromCircle
                    .isChecked())) {
        getPackageManager().setComponentEnabledSetting(component,
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);
        Log.d(TAG, "enabled");

    } else if (status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED
            && !allowCallsFromCircle.isChecked()) {
        getPackageManager().setComponentEnabledSetting(component,
                PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
                PackageManager.DONT_KILL_APP);
        Log.d(TAG, "disabled");
    }
    return true;
}}