2016-11-01 2 views
0

Я собираюсь вставить некоторые напоминания в свое приложение. У каждого из них будет разное время. Читая о BroadcastReceiver, статическая версия запускается даже тогда, когда приложение не работает. Динамическая версия только в том случае, когда приложение остается в живых, будучи уничтоженным onPause и воссоздается onResume. Поскольку я вставляю напоминания, мне нужно создать статические приемники для каждого из моих напоминаний или нет? Правильный способ обработки напоминаний с разным временем?Android динамические и статические BroadcastReceivers

ответ

0

Статический или динамический? Мы можем предположить, что напоминания могут быть установлены в течение более длительных периодов времени, после которых он будет запущен. Поэтому безопаснее использовать статический приемник вещания в вашем случае.

В вашем файле манифеста:

<receiver android:name=".YourBroadcastReceiver"/> 

Отдельный приемник для каждого напоминания? Собственно, нет. Вы можете указать все напоминания на один статический приемник, и он будет обрабатывать все из них без проблем. Если вы хотите разделить между типами напоминаний, которые должны будут выполнять разные действия, вы можете поместить некоторые stringExtra в свои намерения и извлечь их в сообщении if-else в своем широковещательном приемнике. Это один из способов.

Если напоминание было назначено на значительное время в будущем: Возможно, вы знаете, что вы настраиваете напоминания с помощью alarmManager. Однако все аварийные сигналы удаляются, если система перезагружена. Поэтому вы можете добавить некоторые напоминания к своим напоминаниям. Вы можете хранить информацию о напоминаниях в SharedPreferences/SQLite db или любой другой метод, который вы предпочитаете, пока вы можете легко читать и записывать данные из него. Затем вам необходимо сбросить аварийные сигналы после перезагрузки системы. Для этого вам нужно добавить еще один broadcastReceiver, который будет прослушивать действие по перезагрузке системы и выполнение при его получении. Затем вы воссоздаете свои тревоги там или запустите отдельный intentService, который будет воссоздавать сигналы тревоги.

В вашем файле манифеста:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

<receiver android:name=".BootCompletedReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 
+0

Вы имеете в виду 2 broadcastreceivers? Недостаточно ли одного, обрабатывающего BOOT_COMPLETED? Еще одна проблема заключается в том, как получатель получает идентификатор будильника. – learner

+0

Да, два трансляции. Вы также можете реализовать все функции в 1 приемнике. Но почему? Приемник BOOT_COMPLETED предназначен для реселлинга аварийных сигналов, в то время как второй отвечает за реакцию на сигналы тревоги. Их логика отличается, и почему бы не разделить их? Вполне нормально иметь несколько вещательных приемников. – Marat

+0

О id тревоги. Я не знаю, как вы его реализуете в своем случае. Поэтому давайте предположим, что вы передаете id в качестве дополнительной цели, прежде чем создавать ожидающие намерения. Когда время тревоги приходит, система запускает приемник вещания, показанный намерением внутри ожидающего намерения. Затем внутри метода 'onReceive' вы можете получить дополнительные функции. Таким образом, вы можете извлечь идентификатор тревоги – Marat

0

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

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