3

在我的项目中,我使用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 消息。

4

1 回答 1

2

仅当您使用方法在通知中设置意图时,PendingIntent 才有效(以便启动活动)setContentIntent。因此,您可以做的是发布通知而不是直接启动活动。当用户点击通知时,待定意图将用于启动活动。 编辑:作为替代方案,您需要询问SYSTEM_ALERT_WINDOW权限,但您将无法在 Android Go 上执行该应用程序,因为无法在该版本上使用此权限。

于 2019-08-03T07:34:56.880 回答