Повторять будильник каждые 20 минут на андроиде - PullRequest
0 голосов
/ 21 мая 2019

Я хотел бы повторять сигнал каждые 20 минут. Итак, я попробовал:

манифест:

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

AlarmReceiver.class

    public class AlarmReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
                Intent intent2 = new Intent(context, MainActivity.class);
                showNotification(context, "text", "text", intent2);

                Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                Ringtone r = RingtoneManager.getRingtone(context, notification);
                r.play();
        }

@TargetApi(Build.VERSION_CODES.N)
    public void showNotification(Context context, String title, String body, Intent intent) { 

... 

} 

   }

и в моей основной деятельности:

AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
        Calendar time = Calendar.getInstance();
        time.setTimeInMillis(System.currentTimeMillis());
        time.add(Calendar.SECOND, 1200);
        alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);

Работает только в первый раз. Я хотел бы, чтобы это повторялось, даже когда приложение не открывается, какие-либо идеи?

Ответы [ 3 ]

2 голосов
/ 21 мая 2019

Начиная с KitKat (API 19), все аварийные сигналы неточны , что означает, что система будет группировать аварийные сигналы примерно в одно и то же время вместе.Если вам нужно точное время, есть разные API для вызова.Еще более усложняя ситуацию, начиная с Marshmallow, Android представила концепцию Doze, которая еще больше ограничивает то, когда и как вещи могут разбудить устройство.Вы все еще можете использовать точные сигналы тревоги, но необходимо использовать API, который позволяет это делать во время простоя (Doze): setAndAllowWhileIdle().Имейте в виду, что при срабатывании будильника вы можете оказаться в окне Doze, и ваше приложение будет ограничено в зависимости от того, какие операции оно может выполнять.

1 голос
/ 21 мая 2019

Попробуйте ниже для повторения тревоги каждые 20 минут

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(),1000 * 60 * 20, pendingIntent);
0 голосов
/ 22 мая 2019

Попробуйте использовать менеджер работника Android, поскольку он также работает в режиме ожидания.https://developer.android.com/reference/androidx/work/PeriodicWorkRequest#min_periodic_interval_millis

https://developer.android.com/reference/androidx/work/PeriodicWorkRequest

...