gpt4 book ai didi

android - 带有 ONE_SHOT 标志的未决 Intent

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:43 24 4
gpt4 key购买 nike

目前我有这段代码:

public static void setupAlarm(Context context) {
Intent myIntent = new Intent(context, Receiver.class);

PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
0, myIntent, PendingIntent.FLAG_NO_CREATE);
if (pendingIntent != null) {
return;
} else {
pendingIntent = PendingIntent.getBroadcast(context, PENDING_INTENT_RETRY, myIntent,
PendingIntent.FLAG_ONE_SHOT);
}

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.MINUTE, 2);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
}

我想要的是一次使用未决 Intent 并等待开火。如果在此期间有人要求新警报,如果警报存在我不想设置任何东西。现在我的问题是:在第一个警报之后,由于 ONE_SHOT 标志,挂起的 Intent 被删除,但是我是否可以再次创建挂起的 Intent ?

最佳答案

是的,当然你可以重新创建它。您将获得与第一个不同的 PendingIntent

但是,您发布的代码存在一些问题。首先,您像这样创建 PendingIntent:

    pendingIntent = PendingIntent.getBroadcast(context,
PENDING_INTENT_RETRY, myIntent, PendingIntent.FLAG_ONE_SHOT);

但是你检查它是否存在是这样的:

    pendingIntent = PendingIntent.getBroadcast(context,
0, myIntent, PendingIntent.FLAG_NO_CREATE);

此检查将始终返回 null,因为您使用的是不同的 requestCode!当您创建 PendingIntent 时,您将 PENDING_INTENT_RETRY 作为 requestCode 传递,但是当您检查它是否存在时,您将 0 作为 requestCode 传递>.

第二个问题是 FLAG_ONE_SHOT 的工作方式。如果您使用 FLAG_ONE_SHOT 创建一个 PendingIntent,然后尝试使用 FLAG_NO_CREATE 获取一个 PendingIntent,它将始终返回 null,即使尚未使用 PendingIntent! 由于此行为,您不能使用 FLAG_NO_CREATE 来确定警报是否未决,如果您已使用通过 FLAG_ONE_SHOT 创建的 PendingIntent 设置了该警报。

如果你真的想使用这个架构,那么你不能使用FLAG_ONE_SHOT。只需正常创建 PendingIntent(不带标志)并使用 FLAG_NO_CREATE 检查其是否存在。

关于android - 带有 ONE_SHOT 标志的未决 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29778294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com