Как запустить уведомление в сочетании с AlarmManager?
Я пытаюсь выяснить, как я должен запустить уведомление. Создание уведомления - это не то, о чем я прошу, а способ запустить его в фоновом режиме, чтобы оно было ненавязчивым и пользователь мог делать все, что делал. Это для календаря, напоминание, чтобы быть точным. Также важно отметить, что я использую AlarmManager
,
Какой метод я должен использовать, чтобы запустить его в фоновом режиме.
BroadCastReciever
,Service
, так далее.Исследование, которое я нашел, также представляет проблему с
AlarmManager
, Когда приложение убито или телефон выключен, сигнал тревоги также. Какой еще метод я должен использовать, чтобы гарантировать, что уведомление будет отображаться для этого события?
Если требуется дополнительная информация, пожалуйста, спросите, и я сделаю это. Заранее спасибо.
3 ответа
Создать вещательный приемник или интентсервис. Затем...
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Date date = new Date(); //set this to some specific time
or Calendar calendar = Calendar.getInstance();
//set either of these to the correct date and time.
then
Intent intent = new Intent();
//set this to intent to your IntentService or BroadcastReceiver
//then...
PendingIntent alarmSender = PendingIntent.getService(context, requestCode, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
//or use PendingIntent.getBroadcast if you're gonna use a broadcast
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), mAlarmSender); // date.getTime to get millis if using Date directly.
Если вы хотите, чтобы эти сигналы тревоги работали правильно даже после перезагрузки телефона, добавьте:
<action android:name="android.intent.action.BOOT_COMPLETED"/>
как фильтр намерений на вашем приемнике в манифесте и воссоздать ваши тревоги в onReceive.
РЕДАКТИРОВАТЬ
Когда вы создаете BroadcastReceiver в своем приложении, это позволяет делать именно то, на что это похоже: получать трансляции в системе. Например, вы можете использовать BroadcastReceiver:
public class MyAwesomeBroadcastReceiver extends BroadcastReceiver {
//since BroadcastReceiver is an abstract class, you must override the following:
public void onReceive(Context context, Intent intent) {
//this method gets called when this class receives a broadcast
}
}
Чтобы отправить широковещательные сообщения этому классу явным образом, вы определяете получателя внутри манифеста следующим образом:
<receiver android:name="com.foo.bar.MyAwesomeBroadcastReceiver" android:enabled="true" android:exported="false">
<intent-filter>
<action android:name="SOME_AWESOME_TRIGGER_WORD"/>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Наличие этого в манифесте дает вам две вещи: вы можете отправлять трансляцию явным образом своему получателю, когда захотите,
Intent i = new Intent("SOME_AWESOME_TRIGGER_WORD");
sendBroadcast(intent);
Кроме того, поскольку вы сказали android, что хотите получить действие BOOT_COMPLETED, которое транслируется системой, вашему получателю также будет вызван вызов, когда это произойдет.
Вот что вы можете сделать:
запуск
Service
через вашAlarmManager's
в ожидании намерения и напишите свойNotification
код в этом сервисе.Используйте базу данных для хранения всех ваших
Alarms
а затем перепланировать их при перезагрузке устройства с помощьюBOOT_COMPLETED
Broadcast reciver
,