在通知栏中不显示图标的情况下设置闹钟

9
为了在Android OS 6(也称作Marshmallow)中构建一个精确可靠的闹钟,我被迫使用AlarmManager的setAlarmClock方法。问题在于,该方法会在顶部状态栏显示一个闹钟图标。由于我的应用程序需要在每天午夜刷新一些数据,因此它将永远显示闹钟图标,这是不令人愉快的。

你有得到这个问题的答案吗? - user93796
由于您正在使用Marshmallow,是否尝试从System UI Tuner中删除图标?如何在此处启用https://www.androidexplained.com/enable-system-ui-tune。此SO答案https://dev59.com/WXE85IYBdhLWcg3wUBsZ#2839911也可能有所帮助。 - josemigallas
你能否发布一份你如何使用AlarmManager的副本?它不应该这样行为。 - user5125586
3个回答

4
很遗憾,这是Android开发人员为了节省电池而故意设计的。当你查看AlarmManager方法的文档时,这个动机变得清晰明了。例如,以下引用摘自AlarmManager#setExactAndAllowWhileIdle的文档:
“这些警报在设备闲置时可以显著影响电源使用情况(因此会导致应用程序调度它们时出现显著的电池问题),因此应谨慎使用。为了减少滥用,对于特定应用程序,这些警报将有触发频率的限制。在正常系统操作下,它不会每分钟以上的频率发送这些警报(在此期间将发送每个待处理的警报);当处于低功耗空闲模式时,这段时间可能会显着延长,例如15分钟。”
因此,如果你确实需要精确的闹钟,谷歌希望你以某种方式向用户发出信号,表明你的应用程序可能会消耗电力,例如在状态栏中放置小闹钟。引用AlarmManager#setAlarmClock文档中的内容:

因此,这些类型的警报可能会极大地消耗电池电量,应仅用于其预期目的。

因此,你只剩下以下两个选项:
  1. 使用AlarmManager#setExactAndAllowWhileIdle并接受最多15分钟的延迟
  2. 使用AlarmManager#setAlarmClock并接受闹钟

有没有办法隐藏通知阴影栏中闹钟图标旁边显示的时间? - fahad_sust

2

您需要使用setExactAndAllowWhileIdle()。如果您的应用程序没有忽略优化,您只有10秒钟来完成目标。如果您需要更多时间,需要添加权限请求要求用户忽略优化,或者添加部分唤醒锁和/或互联网访问。


1
setExactAndAllowWhileIdle()有一个问题,我不能在15分钟内有两个连续的闹钟,因为SDK是这样说的。 - AVEbrahimi
我该如何请求忽略优化? - AVEbrahimi
1
是的,这是真的,但这是你唯一能做的事情。 - greywolf82
所有信息请访问此链接:http://developer.android.com/training/monitoring-device-state/doze-standby.html#support_for_other_use_cases - greywolf82

-1
如果我理解你的意思,你想使用 AlarmManager 在午夜时刻安排一个任务,而不显示 UI 时钟。你可以使用 AlarmManager#set 来实现,这样就不会显示时钟了。例如:
  alarm.set(
      AlarmManager.RTC_WAKEUP,
      midnightInMillis,
      PendingIntent.getService(getApplicationContext(), 11, intent, PendingIntent.FLAG_UPDATE_CURRENT)
  );

1
从您发布的链接中可以看到:“注意:从API 19开始,传递给此方法的触发时间被视为不精确:闹钟在此时间之前不会被传递,但可能会被推迟并在稍后的某个时间传递。”根据另一个答案中OP的评论,这并不是OP正在寻找的。 - techfly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接