Мне нужно проверить, зарегистрирован ли мой зарегистрированный получатель, если нет, то как я могу проверить это какими-либо методами?
254
Мне нужно проверить, зарегистрирован ли мой зарегистрированный получатель, если нет, то как я могу проверить это какими-либо методами?
Ответы:
Я не уверен, что API предоставляет напрямую API, если вы рассматриваете эту тему :
источник
Нет функции API, чтобы проверить, зарегистрирован ли получатель. Обходной путь должен поместить ваш код в
try catch block as done below.
источник
null
. Но, как вы указали, я иду сtry catch
. Смешной.простейшее решение
в приемнике:
в коде:
объявление 1
-- в ответ на:
- «более элегантный способ» добавлен метод в приемнике для регистрации и установки флага
@amin - видеть время жизни зарегистрированного получателя в коде (а не в системе, зарегистрированной в декларации) :)
источник
Я использую это решение
источник
У вас есть несколько вариантов
Вы можете поместить флаг в свой класс или деятельность. Поместите в ваш класс логическую переменную и посмотрите на этот флаг, чтобы узнать, зарегистрирован ли у вас Receiver.
Создайте класс, который расширяет Receiver и там вы можете использовать:
У шаблона Singleton только один экземпляр этого класса в вашем проекте.
Реализуйте методы, чтобы узнать, зарегистрирован ли получатель.
источник
Вы должны использовать try / catch:
источник
Вы можете сделать это легко ....
1) создать логическую переменную ...
2) Когда вы регистрируете свой Broadcast Receiver, установите его в TRUE
3) В onPause () сделай это ...
Просто так, и теперь вы не будете получать больше сообщений об ошибках исключения onPause ().
Совет 1: всегда используйте unregisterReceiver () в onPause (), а не в onDestroy (). Совет 2: не забывайте устанавливать переменную bolBroadcastRegistred в FALSE при запуске unregisterReceive ()
Успех!
источник
Если вы положите это на метод onDestroy или onStop. Я думаю, что когда действие было создано снова, MessageReciver не был создан.
источник
Я использовал Intent, чтобы сообщить Broadcast Receiver об экземпляре Handler основного потока Activity, и использовал Message, чтобы передать сообщение в Main Activity
Я использовал такой механизм, чтобы проверить, зарегистрирован ли Broadcast Receiver или нет. Иногда это необходимо, когда вы регистрируете свой Broadcast Receiver динамически и не хотите делать это дважды, или вы представляете его пользователю, если работает Broadcast Receiver.
Основное занятие:
Приемник вещания:
источник
Лично я использую метод вызова unregisterReceiver и проглатывания исключения, если оно выдается. Я согласен, что это уродливо, но лучший метод в настоящее время предоставляется.
Я поднял запрос функции, чтобы получить логический метод, чтобы проверить, зарегистрирован ли получатель, добавленный к API Android. Пожалуйста, поддержите его здесь, если вы хотите, чтобы он был добавлен: https://code.google.com/p/android/issues/detail?id=73718
источник
Я понял вашу проблему, я столкнулся с той же проблемой в моем приложении. Я вызывал registerReceiver () несколько раз в приложении.
Простое решение этой проблемы - вызвать registerReceiver () в вашем классе пользовательских приложений. Это гарантирует, что ваш приемник Broadcast будет вызываться только один на протяжении всего жизненного цикла приложения.
источник
Вот как я это сделал, это модифицированная версия ответа, данного ceph3us и отредактированного slinden77 (среди прочего, я удалил возвращаемые значения методов, которые мне не нужны):
Затем в классе Activity:
источник
я поместил этот код в мою родительскую деятельность
List selectedReceivers = new ArrayList <> ();
источник
Для меня сработало следующее:
источник
Вот что я сделал, чтобы проверить, зарегистрирован ли Broadcaster, даже если вы закрываете свое приложение (finish ())
Во время запуска вашего приложения отправьте трансляцию первым, и она вернет значение true / false, в зависимости от того, работает ли ваш вещатель или нет.
Мой вещатель
Моя основная деятельность
источник
Вы можете использовать Dagger, чтобы создать ссылку на этот приемник.
Сначала предоставьте это:
Затем введите его, где вам нужно (используя
constructor
или полеinjection
)и просто передать его
registerReceiver
.И положить его в
try/catch
блок тоже.источник
источник
Просто проверьте NullPointerException. Если получатель не существует, то ...
источник