DrDragoN
@DrDragoN
Программист

Как отправлять уведомления по заданному времени?

Здравствуйте!

Передо мной стоит задача отправки уведомлений по заданному времени пользователем. Например пользователь может создать несколько задач на определенное время, а приложение при наступлении этого времени шлет уведомление. Все действия выполняются строго в приложении без использования Firebase Cloud Messages

Я создал BroadcastReceiver с фильтром BOOT_COMPLETED, в котором запускается Service. В самом Service я создал логику пробежки по базе, определения времени и если время достигнуто, то выводит уведомление

В целом я понимаю как должно быть, но ничего не выходит, поэтому прошу вас разобраться с моими вопросам:
1. Как сделать так, чтобы приложение работало в фоне и выдавало уведомление даже через продолжительное время, даже когда приложение не запущено?
2. Где надо регистрировать BroadcastReceiver?
3. У меня при запуске intent в BroadcastReceiver при работе в фоне выдает ошибку: Not allowed to start service Intent
4. У меня при работе в приложении и выполнения BroadcastReceiver приложение перезапускает активити
5. Согласно статье, разрешение указанное я не смог найти android.permission.SCHEDULE_EXACT_ALARM
6. У меня в AlarmManager нет canScheduleExactAlarms(), хотя указано что метод есть

BroadcastReceiver, _notification_receiver.java
public void onReceive( Context context, Intent intent )
{
Intent INTENT = new Intent( context, _notification_service.class );
context.startService( INTENT );
}


PendingIntent pendingIntent = PendingIntent.getBroadcast( this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT );

AlarmManager alarmManager = ( AlarmManager ) getSystemService( Context.ALARM_SERVICE );
if (pendingIntent != null && alarmManager != null ) alarmManager.cancel( pendingIntent );
alarmManager.setRepeating( alarmType, time, replace, pendingIntent );
  • Вопрос задан
  • 183 просмотра
Пригласить эксперта
Ответы на вопрос 1
1) нужно больше информации по кейсу. Какие версии minSdkVersion, compileSdkVersion, время срабатывания должно быть точным или нет, какого вида работу оно должно делать, база локальная или нет.
2) в зависимости от его типа. Некоторые в манифесте, некоторые через код.
3) все верно. Можно почитать об ограничениях
4) без кода сложно что-то посоветовать.
5,6) если посмотреть, то там ниже написано "Added in API level 31".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы