Проблема в том, что тревога задерживается примерно на 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);
}