取消注册广播接收器

时间:2015-01-15 12:56:41

标签: android

我制作了一个应用程序,即使应用程序关闭,广播接收器也会定期运行。我的应用程序运行良好,但当我想取消注册我的广播接收器时,它给了我“接收器未注册”的错误。我将清单文件中的条目写为

<receiver  android:name=".PhoneCallReceiver">
            <intent-filter  android:priority="10" >
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>

2 个答案:

答案 0 :(得分:2)

您无法使用unregisterReceiver()取消注册您在清单中注册的内容。使用PackageManagersetComponentEnabledSetting()表示此<receiver>是否已启用 - 如果未启用,则不会再响应广播。

答案 1 :(得分:0)

请参阅此答案:https://stackoverflow.com/a/6529365

ComponentName component = new ComponentName(context, MyReceiver.class);
Check if the Component is enabled or disabled

int status = context.getPackageManager().getComponentEnabledSetting(component);
if(status PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
Log.d("receiver is enabled");
} else if(status PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
Log.d("receiver is disabled");
}
Enable/Disable the component(Broadcast Receiver in your case)

//Disable
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP);
//Enable
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED , PackageManager.DONT_KILL_APP);