在我的项目中,我使用AlarmManager来触发每日AlarmClock,但是当出现 Toast 消息后开始警报时:
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 上运行的应用程序只有在满足以下一个或多个条件时才能启动 Activity:
...
应用程序从系统收到通知PendingIntent。在服务和广播接收器的待处理意图的情况下,应用程序可以在发送待处理意图后的几秒钟内启动活动。
如果我理解正确,这正是我的情况。尽管如此,还是会出现前面提到的 toast 消息。