如何从Activity取消注册BroadcastReceiver

时间:2013-02-11 05:58:40

标签: android exception broadcastreceiver android-broadcast

这可能是一个非常简单的问题,但我似乎从一天开始就挂在这些问题上。所以这是一个问题:

如何取消注册从AndroidManifest文件注册的Activity中的BroadcastReceiver? 这是代码::

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

我熟悉这个功能

  

public void unregisterReceiver(BroadcastReceiver receiver)

但如果未使用

从该活动中注册,则会引发异常
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE");
registerReceiver(mybroadcast, filter);

2 个答案:

答案 0 :(得分:4)

要停用receiver中定义的manifest,请使用以下命令:

PackageManager pm = context.getPackageManager();
ComponentName component = new ComponentName(context, PhoneCallReceiver.class)
pm.setComponentEnabledSetting(component , PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP);

答案 1 :(得分:0)

试试这个:

public void onResume()
  {
    IntentFilter filter = new IntentFilter();
    filter.addAction("android.intent.action.PHONE_STATE");
    registerReceiver(mybroadcast, filter);  

  }

  public void onPause()
  {
    unregisterReceiver(mybroadcast);
  }