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

时间:2016-09-28 06:33:53

标签: android

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

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

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

即使应用已关闭,我该怎么办才能运行闹钟?

5 个答案:

答案 0 :(得分:27)

来自setRepeating()的文档:

  

从API 19开始,所有重复警报都不准确。

此外, 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()中检索此额外内容,将所需的间隔添加到其中,并使用新值重新安排闹钟:

@Override
public 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,一些制造商(如小米或华为)可能会实施某些节电功能,可以防止警报被触发,并且不能以编程方式绕过。< / p>

答案 1 :(得分:12)

如今,设备在电池功耗方面具有更高的安全性。默认设备,几乎所有应用程序都处于省电模式。这意味着在某些设备中,一旦您从应用程序中退出,您的后台工作(位置,警报管理器)就无法工作。在其他设备中,后台任务在电池阈值限制(例如13%)后无法工作。因此,您需要将此应用程序与此省电模式保持一致,即使在后台运行您的应用程序也能顺利运行。在这两家制造商中实现这种行为的方法是:

小米

  • 转到电池=&gt;功率=&gt; App电池节电器=&gt;选择您的应用并选择无限制(对于背景设置),然后选择背景位置的允许选项。

  • 要在启动后自动启动您的应用:转到安全应用=>权限=&gt;自动启动并检查您的应用。

三星

三星智能管理器应用程序用于在3天后停止所有后台工作,如果您没有来到您的应用程序。因此,禁用此功能的方法是:

  • 在设置=&gt;中转到电池未受监控的应用=>将您的应用添加到白名单。其他一些三星版本可能会有不同的禁用位置,如Battery =&gt;细节=&gt;选择应用并且不要优化&#34;。

对于其他设备,应该在设置选项中直接使用相同的电源选项,或者给出一些应用来处理它。

答案 2 :(得分:4)

完全充电后,以下行为发生了变化。以前,在禁用此应用程序的节能后,它显示没有电池节电活动等,但仅在完全充电后(从非常低的电池状态)设备的行为应该如此。因此,更改应用程序的这些设置,然后进行完全充电(可能仅在之前电池电量不足之后)。这可以解决它。

中兴Blade L110

即使已禁用省电模式(设置 - &gt;电池 - &gt;选项 - &gt;省电模式),也会将应用标记为信息重要(设置 - &gt;提示&amp;通知 - &gt;应用通知 - &gt; appname - &gt; Priority)似乎setExactsetAlarmClock都没有按时触发。

答案 3 :(得分:2)

联想手机的

: -

你需要进入设置 - &gt; application-&gt; select app-&gt;取消选中限制以启动

现在它将在后台作为被杀死状态

工作

答案 4 :(得分:0)

首先,android studio存在一个错误。如果您从android studio启动该应用,然后将其从最近的应用中滑开,则警报将被删除。因此,在那之后,请通过单击启动器图标重新启动您的应用程序,然后将其滑动,警报仍会存在。

第二,在某些具有电池优化功能的设备上,您应该启动前台服务,并且效果很好。

我可以通过这两点使它工作,现在它就像一种魅力。