gpt4 book ai didi

android - 如何在时钟应用中正确取消 AlarmManager 设置的 AlarmClock 闹钟?

转载 作者:行者123 更新时间:2023-12-04 09:06:26 34 4
gpt4 key购买 nike

这个问题已有答案 here , herehere .但是他们没有被 OP 确认正在工作,在我的情况下,由同一个 PendingIntent 设置的警报没有被取消。 有没有办法取消闹钟闹钟?

@Override
protected void onHandleIntent(@Nullable Intent i) {
Intent i = new Intent(AlarmClock.ACTION_SET_ALARM);
i.putExtra(AlarmClock.EXTRA_SKIP_UI, true);
i.putExtra(AlarmClock.EXTRA_HOUR, 6);
i.putExtra(AlarmClock.EXTRA_MINUTES, 0);
i.putExtra(AlarmClock.EXTRA_MESSAGE, "Good Morning");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

AlarmManager alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
PendingIntent alarmIntent = PendingIntent.getActivity(
this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(),
alarmIntent);
Log.d(TAG, "Alarm set");

try {
Thread.sleep(15000);
alarmMgr.cancel(alarmIntent);
Log.i(TAG, "Alarm canceled");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
此代码按预期输出:
Alarm set
Alarm canceled
但它不会取消设置的闹钟。我究竟做错了什么?

最佳答案

所以,我发现我需要使用 ACTION_DISMISS_ALARM 而不是 ACTION_SET_ALARM .它可以让您取消闹钟中已经设置的闹钟。
答案here , here , 和 here建议取消 PendingIntent ,它对我不起作用,也没有被确认为问题作者工作。
我认为,为什么从 AlarmManager 取消 PendingIntent 不起作用的解释可能是 PendingIntent 可以让您做某事或稍后发送 Intent 。一旦你已经完成(已经发送了 Intent ),你就无法撤消它。例如,您可以取消通知,但不能撤消从通知(已执行的 Intent 或操作)打开应用程序,因为它已经完成。此外,就我而言,这是另一个我需要取消警报的应用程序,所以也许我不应该期望能够撤消该操作。
因此,为了解除或取消警报,您需要发送一个带有操作 ACTION_DISMISS_ALARM 的新 Intent 。 .
如下替换 try/catch 块为我正确设置和取消警报:

try {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.M) {
return;
}
Thread.sleep(15000);
Intent ci = new Intent(AlarmClock.ACTION_DISMISS_ALARM);
ci.setData(i.getData());
alarmIntent = PendingIntent.getActivity(this, 0, ci, 0);
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(),
alarmIntent);
Log.i(TAG, "Alarm cancelled");
} catch (InterruptedException e) {
e.printStackTrace();
}
但是,这只适用于 API 级别 23+ 并且不会让您像 ACTION_SET_ALARM 那样使用 SKIP_UI .

关于android - 如何在时钟应用中正确取消 AlarmManager 设置的 AlarmClock 闹钟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63431995/

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