Какие классы нужно использовать, чтобы получать ежедневные напоминания в точное время в Android - PullRequest
0 голосов
/ 14 октября 2019

Я пробовал класс диспетчера тревог с методом setRepeating для получения ежедневных напоминаний. Но работает нормально только на стоковых андроид устройствах. Большинство китайских устройств не получили напоминания.

Большинство из них рекомендует использовать библиотеку "Evernote android-job". Но это устарело, и они упоминают, что использовать WorkManager.

Диспетчер работ не подходит для точных операций по времени.

Пожалуйста, помогите мне получать ежедневные напоминания.

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Если вам действительно нужно точное время, возможно, было бы лучше отправить сообщение из Firebase Messaging (в точное время), например, с помощью задания CRON.

В приложении вам необходимо расширить FirebaseMessagingService()и вызовите метод для запуска напоминания в onMessageReceived (вы также можете отправить некоторые данные).

Этот подход будет работать на всех устройствах и устойчив к обновлениям приложений, обновлениям ОС и перезапускам телефона. .

0 голосов
/ 14 октября 2019

Попробуйте Firebase jobdispatcher github.com/firebase/firebase-jobdispatcher-android

 FirebaseJobDispatcher jobDispatcher = new FirebaseJobDispatcher(
                    new GooglePlayDriver(mContext));



  Job networkJob = jobDispatcher.newJobBuilder()
                            .setService(MyJobService.class)
                            .setTag(notificationTime)
                            .setRecurring(true)
                            .setTrigger(Trigger.executionWindow(startSeconds, startSeconds + 1))
                            .setLifetime(Lifetime.FOREVER)
                            .setReplaceCurrent(true)
                            .setConstraints(Constraint.ON_ANY_NETWORK, Constraint.DEVICE_IDLE)
                            .build();

                    jobDispatcher.mustSchedule(networkJob);
                    int resultCodeStatus = jobDispatcher.schedule(networkJob);

                    if (resultCodeStatus != FirebaseJobDispatcher.SCHEDULE_RESULT_SUCCESS) {
                        Log.d("JOB_TAG", "Job ERROR ON SCHEDULE");
                    } else {
                        Log.d("JOB_TAG", "Job scheduled");
                    }
...