Дополнительно
Как проверить, зарегистрирован ли приемник в Android?
Мне нужно проверить, зарегистрирован ли мой зарегистрированный приемник, если нет, то как мне это проверить?
235
17
Не существует функции API для проверки того, зарегистрирован ли приемник. Обходной путь - поместить ваш код в блок
try catch, как это сделано ниже.
Я не уверен, что API предоставляет непосредственно API, если рассматривать этот поток:
простое решение
в приемник:
в код:
объявление 1
-- в ответ на:
-- "больше эллегант путь" и добавил метод в приемник, чтобы зарегистрировать и установить флаг
@Амин - см. Продолжительность жизни в код (не системы, зарегистрированные по явной записи) зарегистрировано приемник :)
Я использую это решение
У вас есть несколько вариантов
Вы можете поместить флаг в свой класс или занятие. Поместите в класс булеву переменную и посмотрите на этот флаг, чтобы узнать, зарегистрирован ли у вас приемник.
Создайте класс, который расширяет Receiver, и там вы можете использовать:
Модель Singleton для того, чтобы иметь только один экземпляр этого класса в вашем проекте.
Реализуйте методы, позволяющие узнать, зарегистрирован ли приемник.
Вы должны использовать try/поймать:
Вы можете сделать это легко....
Только это, и теперь, вы не получите сообщение об ошибке исключение в метод onPause().
Tip1: всегда используйте unregisterReceiver() в методов onPause() не в onDestroy() Tip2: не забудьте установить переменную bolBroadcastRegistred false при выполнении unregisterReceive()
Успехов!
Если вы положите это в onDestroy или метод onStop. Я думаю, что когда активность создается заново MessageReciver было'т быть создан.
Я использовала намерение, чтобы позволить вещать приемник знать о экземпляр обработчика основной поток деятельности и использовать сообщение, чтобы передать сообщение в основной деятельности
Я использовал такой механизм, чтобы проверить, если широковещательный приемник уже зарегистрирован или нет. Иногда это необходимо, когда вы регистрируете свой радиовещательный приемник динамически и не хочу делать это дважды или ты присутствовал на пользователей, если трансляция приемник работает.
Основная деятельность:
Радиовещательный Приемник:
Лично я использую метод вызова unregisterReceiver и глотания за исключением, если это'ы бросили. Я согласен, что это некрасиво, но самый лучший способ в настоящее время обеспечивается.
Я'вэ поднял запрос, чтобы получить логический способ, чтобы проверить, если приемник зарегистрирован добавлены в API Андроида. Пожалуйста, поддержите его здесь, Если вы хотите увидеть добавил: https://code.google.com/p/android/issues/detail?id=73718
Я понимаю вашу проблему, я столкнулся с той же проблемой в моем приложении. Я звоню registerReceiver() несколько раз в приложении.
Простым решением этой проблемы является вызов registerReceiver() в пользовательском классе приложения. Это будет гарантировать, что ваш широковещательный приемник будет называться только тот, в свой весь жизненный цикл приложения.
Это, как я сделал это, она представляет собой модифицированную версию ответа дал ceph3us и отредактирован slinden77 (между прочим я снял возвращаемых значений методов, которые мне не нужны):
Тогда на занятие:
я поместил этот код в моей родительской деятельности
Список<число> registeredReceivers = новый ArrayList и Л;>();
Вы можете использовать кинжал, чтобы создать ссылку на этого приемника.
Первые обеспечивают его:
Затем вставляют его где нужно (используя "конструктор" или поле "вливание")
и просто передать его
registerReceiver
.Также положить его в блок try/поймать тоже.
Здесь's то, что я сделал, чтобы проверить, если вещатель уже зарегистрированы, даже если вы закрыть приложение (завершить())
Своими глазами запуск приложения, отправить сначала вещать он будет возвращать true или false в зависимости от Если ваш вещатель по-прежнему работает или нет.
Мой Телеведущий
Мой Класс MainActivity
Просто проверить исключение NullPointerException. Если приемник не существует, то...