【问题标题】:How to unregister BroadcastReceiver from Activity如何从活动中注销广播接收器
【发布时间】:2016-11-15 17:03:23
【问题描述】:

这可能是一个非常简单的问题,但我似乎从一天开始就被这些问题所困扰。那么问题来了:

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

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

我对函数很熟悉

public void unregisterReceiver(BroadcastReceiver接收器)

但是如果没有使用

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

【问题讨论】:

  • 尝试从应用程序对象中注销它。我认为清单中的接收者已在应用程序中注册。
  • @GabeSechan-我不明白...你能给我一些代码吗..??
  • getApplication().unregisterReceiver(receiver); Application 对象还允许您注册和取消注册接收器。如果您通过清单注册接收器,它将注册到应用程序上下文,而不是活动上下文。
  • @GabeSechan-它抛出“me:java.lang.IllegalArgumentException: Receiver not registered”异常!!!

标签: android exception broadcastreceiver android-broadcast


【解决方案1】:

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

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

【讨论】:

  • @iTech- 我不需要提及我需要注销哪个动作接收器......例如:这里是'android.intent.action.PHONE_STATE'!
  • 您指定的接收器类 PhoneCallReceiver.class 足以确定要禁用哪个接收器
【解决方案2】:

试试这个:

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

  }

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

【讨论】:

  • 如果我是从AndroidManifest.xml注册的,我不能从Activity注册!!
猜你喜欢
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-13
  • 2011-11-25
相关资源
最近更新 更多