будильник, как заставить его проснуться точно в срок? - PullRequest
0 голосов
/ 15 октября 2018

Проблема в том, что тревога задерживается примерно на 1-2 минуты.Но всегда работает.Так что время не совсем точно.Я много читал о проблеме.Найти приложение Extra Alarm On Play Market (для этого нужны специальные правила android.permission.ACCESS_NOTIFICATION_POLICY, но не знаю, как оно должно влиять на точное время пробуждения).И играет именно на моем устройстве (Android 8.0 Honor 7 Pro).Так что есть способ сделать это.Но как?
Я пытался:

1) приемник android: name = ". Receivers.AlarmReceiver" android: process = ": remote" android: process = ": remote"

2) Попробуйте использовать setExactAndAllowWhileIdle.То же самое - таймер неточен.Может быть что то?Как предварительные намерения или дополнительные намерения перед основным сигналом тревоги?Есть идеи?) Не используете AlarmManager?Что-то запланировано?

У меня есть: AlarmHelper класс:

        long firstAlarm = 1639534528996l;
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(alarm.getTime());
        if (calendar.getTimeInMillis() < System.currentTimeMillis()) {
            calendar.add(Calendar.DAY_OF_YEAR, 1);
        }
        Intent myIntent = new Intent(App.getInstance().getApplicationContext(), AlarmReceiver.class);
        final Bundle bundle = new Bundle();
        bundle.putByteArray(Alarm.TAG, Parcelables.toByteArray(alarm));
        myIntent.putExtras(bundle);

        AlarmManager alarmManager = (AlarmManager) App.getInstance().getApplicationContext().getSystemService(Context.ALARM_SERVICE);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(App.getInstance().getApplicationContext(), (int) calendar.getTimeInMillis(), myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        if (set) {
            alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(calendar.getTimeInMillis(), pendingIntent), pendingIntent);
        } else {
            alarmManager.cancel(pendingIntent);
        }

        firstAlarm = calendar.getTimeInMillis();

И AlarmReceiver:

    public void onReceive(Context context, Intent intent) {

    Intent intentNew = new Intent(App.getInstance().getApplicationContext(), AlarmActivity.class);

    final Bundle bundle = intent.getExtras();
    intentNew.putExtra(Alarm.TAG, bundle.getByteArray(Alarm.TAG));
       intentNew.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    context.startActivity(intentNew);
}
...