我正在写一些类似用户的提醒.用户将为其事件设置提醒,当时间到来时,将设置重复警报以触发状态栏通知.但是在我选择通知或清除通知后,警报似乎不停.我不知道在哪里取消这个重复闹钟.以下是一些代码:在我的主要活动中设置重复警报
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);
Run Code Online (Sandbox Code Playgroud)
在我的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);
Run Code Online (Sandbox Code Playgroud)
当用户选择通知或清除通知时,如何停止警报?
Com*_*are 79
调用cancel()上AlarmManager用等效PendingIntent于你所使用的一个setRepeating():
Intent intent = new Intent(this, AlarmReceive.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(sender);
Run Code Online (Sandbox Code Playgroud)
我尝试了各种方法都无法奏效,所以我决定做一个肮脏的把戏。当我想取消重复闹钟时,我会使用创建闹钟的相同方法(因此替换旧闹钟),然后立即取消。使用此方法,如果布尔变量设置为 true,它会创建一个警报流,它会替换并取消具有相同 ID 的替换:
static void CancelRepeatingAlarm(Context context, boolean creating){
//if it already exists, then replace it with this one
Intent alertIntent = new Intent(context, AlertReceiver.class);
PendingIntent timerAlarmIntent = PendingIntent
.getBroadcast(context, 100, alertIntent,PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (creating){
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), INTERVAL, timerAlarmIntent);
}else{
alarmManager.cancel(timerAlarmIntent);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54298 次 |
| 最近记录: |