应用程序关闭时,Android AlarmManager无法在某些设备上运行

应用程序关闭时,Android AlarmManager无法在某些设备上运行,第1张

概述我试图每隔半小时从AlarmManagersetRepeating()运行IntentService.我想发送广播,从广播到意向服务.在服务中,将完成一些功能.但是,最初AlarmManager在应用程序处于关闭状态时不会触发.当我的应用程序正在运行或处于后台状态时,警报工作正常,当我关闭应用程序时,警报在某些设备中

我试图每隔半小时从AlarmManager setRepeating()运行IntentService.我想发送广播,从广播到意向服务.在服务中,将完成一些功能.

但是,最初AlarmManager在应用程序处于关闭状态时不会触发.

当我的应用程序正在运行或处于后台状态时,警报工作正常,当我关闭应用程序时,警报在某些设备中无效.

即使应用程序关闭,我该怎么做才能运行闹钟?

解决方法:

从setRepeating()的文档:

As of API 19, all repeating alarms are inexact.

而且,setRepeating()不适用于Doze.

您应该使用精确警报(根据设备的API级别通过适当的AlarmManager方法设置):

if (Build.VERSION.SDK_INT >= 23) {    alarmManager.setExactAndAllowWhileIDle(AlarmManager.RTC_WAKEUP,            triggerTime, pendingIntent);} else if (Build.VERSION.SDK_INT >= 19) {    alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent);} else {    alarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent);}

每当他们开火时重新安排他们.

对于重新安排,您可以将原始触发时间添加到Intent:

intent.putExtra(KEY_TRIGGER_TIME, triggerTime);

然后在onReceive()中检索此额外内容,将所需的间隔添加到它并使用新值重新安排警报:

@OverrIDepublic voID onReceive(Context context, Intent intent) {    long triggerTime = intent            .getLongExtra(KEY_TRIGGER_TIME, System.currentTimeMillis());    // adding one day to the current trigger time    triggerTime += TimeUnit.DAYS.toMillis(1);    // set a new alarm using the new trigger time    // ...}

注意:正如上面评论中提到的@Opiatefuchs,一些制造商(如小米或华为)可能会实施某些节电功能,可以防止警报被触发,并且不能以编程方式绕过.

总结

以上是内存溢出为你收集整理的应用程序关闭时,Android AlarmManager无法在某些设备上运行全部内容,希望文章能够帮你解决应用程序关闭时,Android AlarmManager无法在某些设备上运行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1104007.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存