2014-10-02 3 views
0

У меня есть подсистема приемника, классифицированная внутри фрагмента и сопровождающая служба, которая отправляет сообщение в широковещательный приемник, чтобы показать тост неопределенно в ожидании определенных условий. У меня также есть логическое значение, чтобы сообщить мне, работает ли приемник или нет. Приемник зарегистрирован щелчком элемента списка, как показано.IllegalArgumentException: Получатель не зарегистрирован в подклассе Получатель в пределах фрагмента

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

Я хочу отменить регистрацию после разрушения фрагмента. Я знаю. Документы говорят, что он должен быть незарегистрирован в OnPause, но во время onPause я использую приемник в сочетании с сервисом, чтобы сохранить тост. В моем On Уничтожить я Разрегистрировать как ниже

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. Если я прокомментирую эту строку, я получаю сообщение об ошибке, чтобы не отменить регистрацию моего получателя. Как я могу это решить?

ответ

2

IllegalArgumentException: Получатель не зарегистрирован

Поскольку вы передаете другой объект из Receiver класса в unregisterReceiver метода. использовать тот же самый объект, который вы прошли в registerReceiver для незарегистрированного радиовещательного приемника:

-> Создайте объект Receiver класса на уровне класса:

private Receiver objReceiver; 

-> Initialize objReceiver объекта перед вызовом registerReceiver метода :

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

-> Pass objReceiver объект unregisterReceiver:

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

вам мой друг заслуживают Upvote и холодное пиво, чтобы пойти с ним –

Смежные вопросы