В моем проекте я использую AlarmManager для ежедневного запуска AlarmClock, но когда приходит время запуска будильника, появляется следующее всплывающее сообщение:
Background activity start from com.example.nameOfApp blocked. See g.co/dev/bgblock
Обновленный код:
------- метод setAlarmClock-------
private void setAlarmClock(Calendar calendar, int alarmId, String time, String timeOfTheDay, boolean action) {
AlarmManager manager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getActivity(), AlarmClockReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), alarmId, intent, 0);
if (action) {
manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pendingIntent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
}
} else {
manager.cancel(pendingIntent);
}
}
------- Класс AlarmClockReceiver -------
public class AlarmClockReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String alarmAction = AlarmClock.ACTION_SET_ALARM;
Intent i = new Intent(alarmAction);
i.putExtra(AlarmClock.EXTRA_SKIP_UI, true);
i.putExtra(AlarmClock.EXTRA_MESSAGE, "Time for taking medicine!");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
Кроме того, в AndroidManifest я включил следующую строку:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
Я знаю, что это связано с новым изменением конфиденциальности Android Q. Из вышеупомянутой ссылки сказано:
Приложения, работающие на Android Q, могут запускать действия только при соблюдении одного или нескольких из следующих условий:
...
Приложение получает уведомление PendingIntent от системы. В случае ожидающих намерений для служб и широковещательных приемников приложение может начать действия в течение нескольких секунд после отправки ожидающих намерений.
Если я правильно понял, то это как раз мой случай. Тем не менее вышеупомянутое всплывающее сообщение появляется.
PendingIntent
. Это сигнал тревогиPendingIntent
. - person Mike M.   schedule 03.08.2019