我试图每隔半小时IntentService就这样跑AlarmManager setRepeating().我想发送广播,从广播到意向服务.在服务中,将完成一些功能.
但是,最初AlarmManager在app处于关闭状态时不会触发.
当我的应用程序正在运行或处于后台状态时,警报工作正常,当我关闭应用程序时,警报在某些设备中无效.
即使应用程序关闭,我该怎么做才能运行闹钟?
ear*_*jim 32
来自以下文件setRepeating():
从API 19开始,所有重复警报都是不精确的.
而且,setRepeating()不适用于Doze.
您应该使用精确警报(AlarmManager根据设备的API级别通过适当的方法设置):
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);
}
Run Code Online (Sandbox Code Playgroud)
每当他们开火时重新安排他们.
对于重新安排,您可以将原始触发时间添加到Intent:
intent.putExtra(KEY_TRIGGER_TIME, triggerTime);
Run Code Online (Sandbox Code Playgroud)
然后检索此额外内容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
// ...
}
Run Code Online (Sandbox Code Playgroud)
注意:正如上面评论中提到的@Opiatefuchs,一些制造商(如小米或华为)可能会实施某些节电功能,可以防止警报被触发,并且不能以编程方式绕过.
Imr*_*ifi 13
现在,在电池电量消耗的背景下,设备即将出现更多安全性.默认情况下,设备几乎将所有应用程序保持在省电模式 这意味着在某些设备中,当您从应用程序中退出时,您的后台工作(位置,警报管理器)将无法正常工作,在某些设备中,后台任务在电池阈值限制(例如13%)后将无法工作.因此,您需要将此应用程序与此省电模式保持一致,即使在后台运行您的应用程序也能顺利运行.你可以为不同的制造商做这个..
- >转到电池 - >电源 - >应用程序节电 - >您的应用现在选择无限制(对于背景设置)然后选择背景位置选项
- >要在启动后自动启动应用程序 - >转到安全应用程序 - >权限 - >自动启动并检查您的应用程序
- >> Samsung Smart Manager App用于在3天后停止所有后台工作,如果你没有来到你的应用程序.因此,为您的应用禁用此功能转到应用程序 - >电池 - >详细信息(应用程序省电) - >单击您的应用程序并选择禁用
对于其他设备,应该在设置选项中直接使用相同的电源选项,或者给出一些应用来处理它.
首先,android studio 有一个错误。如果您从 android studio 启动该应用程序,然后将其从最近的列表中滑动,则警报将被删除。因此,在那之后,通过单击启动器图标重新启动您的应用程序,然后如果您将其滑开,警报将仍然存在。
其次,在一些具有电池优化功能的设备上,您应该启动一个前台服务,并且完全正常。
我可以使用这两点让它工作,现在它就像一个魅力。
充满电后,以下行为发生了变化。以前,在禁用此应用程序的节能功能后,它显示没有节电等功能,但是只有在充满电(从非常低的电池状态开始)后,设备才能正常运行。因此,请为应用程序更改这些设置,然后进行完全充电(可能仅在之前电池电量不足之后)。这可以解决它。
即使在电池保护程序禁用(设置- >电池- >选项- >电池节电器)并标记为重要的消息的应用程序(设置- >提示与通知- >应用通知- >应用程序的名字- >优先级)这似乎是既不setExact也不setAlarmClock准时触发。
| 归档时间: |
|
| 查看次数: |
10941 次 |
| 最近记录: |