gpt4 book ai didi

java - 无法取消 Android 闹钟管理器的闹钟

转载 作者:太空宇宙 更新时间:2023-11-04 12:43:18 39 4
gpt4 key购买 nike

我正在尝试使用我的应用设置多个闹钟,并根据请求取消它们。

我已经阅读了很多有关相同主题的内容,并浏览了文档,但它似乎不起作用。

文档说cancel将尝试找到一个与我用“filterEquals”提供的 Intent 相匹配的 Intent (“为了 Intent 解析(过滤)的目的,确定两个 Intent 是否相同。也就是说,它们的操作、数据、类型、类和类别是否相同。这不会比较 Intent 中包含的任何额外数据。”)

我提供了相同的操作、数据、类型、类和类别,为什么它不起作用?

创建警报:

    AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
int interval = 30000;

Intent intent = new Intent(getApplicationContext(), Broadcast.class);
intent.putExtra("alarmTime",alarmTime);
intent.putExtra("reminder1",reminder1);
intent.putExtra("reminder2",reminder2);
intent.putExtra("title",title);
intent.putExtra("message",message);
intent.putExtra("vibrate",vibrate);
intent.putExtra("sound",sound);
intent.putExtra("name",name);

//Create _id from data input. is unique
int _id = 0;
for (char i: name.toCharArray()){
_id += Character.getNumericValue(i);
}
for (char i:title.toCharArray()){
_id += Character.getNumericValue(i);
}
for (char i:message.toCharArray()){
_id += Character.getNumericValue(i);
}
_id += (int) alarmTime.getTime();
_id += (int) reminder1.getTime();
_id += (int) reminder2.getTime();
Log.e("ALARMS", "Creating alarm with id: "+_id);
intent.setData(Uri.parse("custom://" + _id));
intent.setAction(String.valueOf(_id));
PendingIntent pendingUpdateIntent = PendingIntent.getBroadcast(getApplicationContext(), _id, intent, 0);

manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + interval, pendingUpdateIntent);

取消闹钟

AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), Broadcast.class);
intent.putExtra("alarmTime",alarmTime);
intent.putExtra("reminder1",reminder1);
intent.putExtra("reminder2",reminder2);
intent.putExtra("title",title);
intent.putExtra("message",message);
intent.putExtra("vibrate",vibrate);
intent.putExtra("sound",sound);
intent.putExtra("name",name);

int _id = 0;
for (char i:name.toCharArray()){
_id += Character.getNumericValue(i);
}
for (char i:title.toCharArray()){
_id += Character.getNumericValue(i);
}
for (char i:message.toCharArray()){
_id += Character.getNumericValue(i);
}
_id += (int) alarmTime.getTime();
_id += (int) reminder1.getTime();
_id += (int) reminder2.getTime();
intent.setData(Uri.parse("custom://" + _id));
intent.setAction(String.valueOf(_id));
PendingIntent pendingUpdateIntent = PendingIntent.getBroadcast(getApplicationContext(), _id, intent, 0);
Log.e("ALARMS", "Cancelling alarm with id: "+_id);
// Cancel alarms
try {
manager.cancel(pendingUpdateIntent);
} catch (Exception e) {
Log.e("ALARMS", "AlarmManager update was not canceled. " + e.toString());
}

所以我用不同的参数调用了3次创建警报,所以我的_id每次都不同。

然后我调用 3 次取消警报,并且在创建和取消时为每个警报生成的 ID 匹配。

所以取消运行,但我的警报仍然被触发。

我的闹钟会触发一个广播接收器,该接收器将根据每个闹钟输出一条通知。

我忘了提及,我尝试为 PendingIntent 使用不同的标志,但没有任何效果(FLAG_CANCEL_CURRENT、FLAG_UPDATE_CURRENT)

最佳答案

似乎我向警报提供了不同的日期,并且 _id 有几个数字不同(开始和结束相同),这导致对不同且不起作用的 _id 值调用取消。

更改了生成 _id 的方式以排除日期(我使用 new Date() 生成的),但它不起作用

可惜我没看到。

关于java - 无法取消 Android 闹钟管理器的闹钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36603459/

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