自从Android Lollipop 5.0(API21)发布以来,现在有一个官方API可以显示/隐藏闹钟图标。关于此问题,在stackoverflow上有更多信息,请点击这里。
由于这个API的帮助,我现在可以在5.0+的Android设备上显示闹钟图标。不幸的是,如果闹钟被禁用,我无法解除/隐藏/取消该图标。
以下是我的操作步骤(结合了stackoverflow和Android自带闹钟的几个尝试):
如果我们的设备版本低于Android 5.0(棒棒糖),则它仍然能很好地工作。但是,对于使用Android 5.0及以上版本的设备,当启用闹钟时会显示图标,但是如果您将其禁用(且未启用其他闹钟),则该闹钟被取消,但通知栏中的图标仍然存在(预期结果)。有人对此问题有什么想法吗?
谢谢您的帮助。
由于这个API的帮助,我现在可以在5.0+的Android设备上显示闹钟图标。不幸的是,如果闹钟被禁用,我无法解除/隐藏/取消该图标。
以下是我的操作步骤(结合了stackoverflow和Android自带闹钟的几个尝试):
public static void setNextAlert(final Context context) {
final Alarm alarm = calculateNextAlert(context);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(ALARM_ALERT_ACTION);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
int flags = alarm == null ? PendingIntent.FLAG_NO_CREATE : 0;
PendingIntent operation = PendingIntent.getBroadcast(context, 0 /* requestCode */, intent, flags);
if (alarm != null)
{
if(UtilsAlarm.isLollipopOrLater())
{
PendingIntent viewIntent = PendingIntent.getActivity(context, alarm.id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager.AlarmClockInfo info = new AlarmManager.AlarmClockInfo(alarm.time, viewIntent);
am.setAlarmClock(info, operation);
}
else
{
if(UtilsAlarm.isKitKatOrLater())
{
am.setExact(AlarmManager.RTC_WAKEUP, alarm.time, sender);
}
else
{
am.set(AlarmManager.RTC_WAKEUP, alarm.time, sender);
}
setStatusBarIcon(context, true);
}
Calendar c = Calendar.getInstance();
c.setTimeInMillis(alarm.time);
String timeString = formatDayAndTime(context, c);
saveNextAlarm(context, timeString);
}
else
{
if(UtilsAlarm.isLollipopOrLater())
{
am.cancel(operation);
}
else
{
am.cancel(sender);
setStatusBarIcon(context, false);
}
saveNextAlarm(context, "");
}
Intent i = new Intent(NEXT_ALARM_TIME_SET);
context.sendBroadcast(i); }
如果我们的设备版本低于Android 5.0(棒棒糖),则它仍然能很好地工作。但是,对于使用Android 5.0及以上版本的设备,当启用闹钟时会显示图标,但是如果您将其禁用(且未启用其他闹钟),则该闹钟被取消,但通知栏中的图标仍然存在(预期结果)。有人对此问题有什么想法吗?
谢谢您的帮助。
FLAG_NO_CREATE
进行取消。 - Adam S