如何取消这个重复的闹钟呢?
我正在写一些类似于用户提醒的东西。用户将为他们的事件设置提醒,当时间到来时,将设置重复闹钟以触发状态栏通知。但在我选择通知或清除通知后,闹钟似乎不停。我不知道在哪里可以取消这个重复的警报。下面是一些代码: 在我的主要活动中设置重复闹钟
alarmTime = Calendar.getInstance();
Intent intent = new Intent(this, AlarmReceive.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmTime.add(Calendar.MINUTE,offset_time);
//Schedule the alarm
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime.getTimeInMillis(), 30 * 1000, sender);
在我的 OnReceive 方法中,我只是在状态栏中显示通知并将标志设置为 FLAG_AUTO_CANCEL
manager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
// Set the icon, scrolling text and timestamp
Notification notification = new Notification(R.drawable.medical, text, System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, i, 0);
notification.flags = Notification.FLAG_AUTO_CANCEL;
manager.notify(R.string.service_text, notification);
当用户选择通知或清除通知时如何停止闹钟?
I'm writing something like a reminder for users. Users will set reminders for their events, when the time comes, a repeating alarm will be set to trigger a status bar notification. But the alarm seems non-stop after I selected the notification or cleared the notification. I am not sure where to cancel this repeating alarm. Below are some of the codes:
Set up the repeating alarm in my main activity
alarmTime = Calendar.getInstance();
Intent intent = new Intent(this, AlarmReceive.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmTime.add(Calendar.MINUTE,offset_time);
//Schedule the alarm
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime.getTimeInMillis(), 30 * 1000, sender);
In my OnReceive method, I just display the notification in status bar and set the flag as FLAG_AUTO_CANCEL
manager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
// Set the icon, scrolling text and timestamp
Notification notification = new Notification(R.drawable.medical, text, System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, i, 0);
notification.flags = Notification.FLAG_AUTO_CANCEL;
manager.notify(R.string.service_text, notification);
How can I stop the alarm when the user selects the notification or clears it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用与
setRepeating()
中使用的等效的PendingIntent
对AlarmManager
调用cancel()
:Call
cancel()
onAlarmManager
with an equivalentPendingIntent
to the one you used withsetRepeating()
:我尝试了各种方法都无法奏效,所以我决定搞一个肮脏的把戏。当我想取消重复闹钟时,我使用创建闹钟的相同方法(因此替换旧闹钟),然后立即取消它。使用此方法,如果布尔变量设置为 true,它将创建一个警报流并替换,然后取消具有相同 id 的替换:
I tried various methods and couldnt get it to work, so I decided to do a dirty trick. When I want to cancel my repeating alarm, I use the same method that created my alarm (and hence replacing the old one) and then cancel it right away. With this method if the boolean variable is set to true it creates an alarm ow it replaces and then cancels the replacement which has the same id:
在您的
MainActivity
中,设置闹钟时间。如果您要使用多个闹钟,请使用SharedPreferences
存储它们各自的 ID。代码如下:在您的第二个
Activity
中,使用SharedPreferences
中的相同 ID。在我的代码中,我从 ArrayList 中获取 ID,Alarm_id
。最后,您可以通过MainActivity.getContext()
使用 MainActivity 上下文。这是代码:In your
MainActivity
, set the alarm time. If you're going to use multiple alarms, useSharedPreferences
to store their respective IDs. Here is the code:In your second
Activity
use same ID fromSharedPreferences
. In my code, I get the ID from the ArrayList,Alarm_id
. Last, you can use the MainActivity context here withMainActivity.getContext()
. Here is the code: