【发布时间】:2014-09-20 12:42:19
【问题描述】:
背景
我目前正在为 Android 开发一个应用程序,它围绕在用户指定时间发出的警报。我的意图是它将用于在早上叫醒人们(以及第二天早上 - 也就是重复闹钟)。当闹钟响起时,它会调用
Activity,它有几个选项(例如贪睡)。我已经完成了所有这些工作,但我遇到了问题。问题
我正在使用
AlarmManager 来处理我的警报需求。然而,课堂上发生了一些奇怪的事情(在我看来)。有两种建议的方法来处理闹钟时间的设置。即setInexactRepeating和setRepeating。这些功能的问题是:
-
setInexactRepeating不是很准确。我的测试表明,这在指定时间大约被激活,文档表明,这一切都相当模糊;在此时间之前警报不会触发,但在第一次调用警报之前可能会有几乎整个警报间隔的延迟。
我的测试显示通常会有 5 分钟的延迟。在this answer 上,用户的平均延迟约为 12 分钟。当然,这不适用于应该在指定时间唤醒人们的系统。
-
setRepeating确实在指定时间触发。然而,文档指定从 API 19 开始,所有重复警报都是不准确的。这正是我不想要的。从 API 19 开始,所有重复警报都是不准确的。由于此方法从 API 3 开始可用,因此您的应用程序可以安全地调用它,并确保它在当前和旧版本的 Android 上都能获得类似的行为。
有一个setExact 方法,但这有点太具体了。除此之外,它没有让我选择有一定的时间间隔(每天重复警报)。 编辑:在尝试使用 setExact 之后,我发现这需要我升级到 API 19(目前为 15),这是我想避免的。
问题
我为这个系统使用了错误的类吗?对我来说,这似乎应该是一种合法的用法,但通读文档让我感到疑惑。是否还有其他更适合该系统的类?
【问题讨论】:
-
@MikeM。我的意思是它是一个可能有点矫枉过正的功能。使用它有点浪费电池。你提到的警告让我回到了 setExact 有点过分的感觉。我不希望应用程序在 exact 指定的时间本身运行。我不介意它是否会在 30 秒左右(不是一分钟)后触发。我只是想知道我是否使用了正确的类,因为没有一个函数似乎非常适合(我可能正在寻找一个中间函数)。也许我应该克服这种感觉并使用 setExact ;)
-
@MikeM。 Dang,刚刚发现使用
setExact需要我升级到 API 19,这是我想避免的。真的没有其他选择来使用这个类和/或其功能吗? -
@MikeM。学到了一些新东西。不知道您可以检查不同的 API 级别并相应地更改您的方法。谢谢:)
-
有任何可行的解决方案吗?
-
@droid_dev 不幸的是,我已经被淹没了,所以我很快就没有时间输入答案了。为了让您顺利上路,您可以创建一个检查
android.os.Build.VERSION的 if 语句。如果等于或高于19,则使用exactRepeating,如果低于setRepeating。希望对您有所帮助(目前)。
标签: android alarmmanager