我试图每半小时从IntentService
AlarmManager
运行setRepeating()
。我想发送广播,从广播到意向服务。在服务中,将完成一些功能。
但是,最初AlarmManager
在应用处于关闭状态时不会触发。
当我的应用程序正在运行或处于后台状态时,警报工作正常,当我关闭应用程序时,警报在某些设备中无效。
即使应用已关闭,我该怎么办才能运行闹钟?
答案 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天后停止所有后台工作,如果您没有来到您的应用程序。因此,禁用此功能的方法是:
对于其他设备,应该在设置选项中直接使用相同的电源选项,或者给出一些应用来处理它。
答案 2 :(得分:4)
完全充电后,以下行为发生了变化。以前,在禁用此应用程序的节能后,它显示没有电池节电活动等,但仅在完全充电后(从非常低的电池状态)设备的行为应该如此。因此,更改应用程序的这些设置,然后进行完全充电(可能仅在之前电池电量不足之后)。这可以解决它。
即使已禁用省电模式(设置 - &gt;电池 - &gt;选项 - &gt;省电模式),也会将应用标记为信息重要(设置 - &gt;提示&amp;通知 - &gt;应用通知 - &gt; appname - &gt; Priority)似乎setExact
和setAlarmClock
都没有按时触发。
答案 3 :(得分:2)
: -
你需要进入设置 - &gt; application-&gt; select app-&gt;取消选中限制以启动
现在它将在后台作为被杀死状态
工作答案 4 :(得分:0)
首先,android studio存在一个错误。如果您从android studio启动该应用,然后将其从最近的应用中滑开,则警报将被删除。因此,在那之后,请通过单击启动器图标重新启动您的应用程序,然后将其滑动,警报仍会存在。
第二,在某些具有电池优化功能的设备上,您应该启动前台服务,并且效果很好。
我可以通过这两点使它工作,现在它就像一种魅力。