IllegalArgumentException:接收器未在片段内的子类接收器上注册

时间:2014-10-02 12:58:34

标签: android android-fragments receiver

我有一个分类在一个片段中的接收器子和一个附带的服务,它向广播接收器发送一条消息,以显示一个不确定地挂起某些条件的祝酒词。我也有一个布尔值告诉我接收器是否正在运行。接收器在点击列表项目时注册,如图所示。

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

我想在销毁片段后取消注册。我知道文档说它应该在OnPause中未注册但在onPause期间我使用Receiver与服务一起保持toast。在我的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:Receiver未在Unregister行上注册。如果我注释掉该行,我会收到一条关于不注销我的Receiver的错误日志。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

  

IllegalArgumentException:Receiver未注册

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

- > 在班级创建Receiver班级的对象:

private Receiver objReceiver;

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

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

- > objReceiver对象传递给unregisterReceiver

  if(objReceiver !=null)
    getActivity().unregisterReceiver(objReceiver);