0

我有一个 Receiver 子类在 Fragment 和一个随附的 Service 中,该 Service 向广播接收器发送一条消息,以显示不确定地等待某些条件的 toast。我还有一个布尔值来告诉我接收器是否正在运行。接收者在点击列表项时注册,如图所示。

if(!ReceiverON){
                              getActivity().registerReceiver(new Receiver(), filter);
                              ReceiverON=true;
                            }

一旦片段被销毁,我想取消注册它。我知道文档说它应该在 OnPause 中取消注册,但在 onPause 期间,我将接收器与服务结合使用来保持敬酒。在我的 On Destroy I Unregister 中如下

if( ReceiverON){
             ReceiverON=false;
            Log.i("Log on Destroy", "Receiver ON...Destroying");
            getActivity().unregisterReceiver(new Receiver());
            if(getActivity().startService(ServiceIntent) != null) { 
                getActivity().stopService(ServiceIntent);
             }

        }

如果我按照上述操作,应用程序会因 IllegalArgumentException 崩溃:接收方未在 Unregister 行上注册。如果我注释掉该行,我会收到关于未取消注册我的接收器的错误日志。我该如何解决这个问题?

4

1 回答 1

2

IllegalArgumentException:接收方未注册

因为您Receiver在方法中传递了不同的类对象unregisterReceiver。使用您传入的相同对象registerReceiver取消注册广播接收器:

->Receiver在类级别创建类对象:

private Receiver objReceiver;

->objReceiver在调用registerReceiver方法之前初始化对象:

objReceiver=new Receiver();
getActivity().registerReceiver(objReceiver, filter);

->将对象传递objReceiverunregisterReceiver

  if(objReceiver !=null)
    getActivity().unregisterReceiver(objReceiver);
于 2014-10-02T13:28:47.217 回答