【问题标题】:AlarmManager not working as expected in sleep mode on S5 Neo在 S5 Neo 的睡眠模式下,AlarmManager 无法正常工作
【发布时间】:2016-04-26 09:38:00
【问题描述】:

我在服务中使用 AlarmManager 每分钟触发一次。

    PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0,
            getUpdateServiceIntent(mContext), PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);

    // Cancel any pending Intent
    am.cancel(pendingIntent);

    // Set a new one
    am.set(AlarmManager.RTC_WAKEUP, 60000, pendingIntent);

在三星 S5 Neo 上: 当屏幕处于活动状态时,它按预期工作。 当屏幕关闭时,它每 5 分钟触发一次(而不是一分钟)。

我在 S5 Mini(Android 4.4)、Nexus 5 5.1 和 Nexus 5 6.0 上尝试了完全相同的代码,该代码运行良好。

targetSdkVersion 为 19。

知道如何在屏幕关闭时保持 AlarmManager 正常工作吗? 即使我要求 30 秒,延迟仍然是 5 分钟。

编辑: 我也尝试了“setExact”方法,但它没有改变任何东西。每次闹铃之间仍有 5 分钟的间隔。

【问题讨论】:

标签: android alarmmanager samsung-mobile


【解决方案1】:

你应该使用

AlarmManager#setExact(int type, long triggerAtMillis, PendingIntent operation)

而不是

AlarmManager#set(int type, long triggerAtMillis, PendingIntent operation))

Take a look

来自谷歌:

AlarmManager#set(int type, long triggerAtMillis, PendingIntent operation))

注意:从 API 19 开始,传递给此方法的触发时间被视为不精确:在此时间之前不会发送警报,但可能会延迟并在一段时间后发送。操作系统将使用此策略在整个系统中“批量”发出警报,从而最大限度地减少设备需要“唤醒”的次数并最大限度地减少电池使用量。一般来说,安排在近期的警报不会被推迟,只要安排在很远的将来的警报。

编辑:

我用于警报应用程序的内容:

清单:

<uses-permission android:name="android.permission.WAKE_LOCK"/>

Java 代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo(nextAlarm.getTimeInMillis(), pendingIntent);
  alarmManager.setAlarmClock(alarmClockInfo, pendingIntent);
}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  alarmManager.setExact(android.app.AlarmManager.RTC_WAKEUP, nextAlarm.getTimeInMillis(), pendingIntent);
}else {
  alarmManager.set(android.app.AlarmManager.RTC_WAKEUP, nextAlarm.getTimeInMillis(), pendingIntent);
}

【讨论】:

  • 我已经尝试了 'setExact' 方法,但它没有改变任何东西:还有 5 分钟的等待时间。我会更准确地编辑我的问题。
  • @MathieuH。您能否发布清单中的许可以及 S5 Neo 也是哪个版本的 Android?
  • 我使用了很多权限,包括android.permission.WAKE_LOCK。 S5 Neo 安卓版本为 5.1.1。
  • 事实上你的编辑是有效的,但我不知道为什么。使用 AlarmClockInfo 正在工作。即使使用 RTC_WAKEUP,也不使用 setExact。所以谢谢你的帮助!
  • 虽然使用 setAlarmClock 的解决方案可以在存在 setExact 问题的设备上正确安排警报,但它也会更改下一个系统警报信息(例如,它将在时钟小部件上显示警报时间)。因此,对于非闹钟应用来说,它可能不是理想的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 2019-12-28
相关资源
最近更新 更多