android alarmmanager后台,应用程序关闭时,Android 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()中检索此额外内容,将所需的间隔添加到它并使用新值重新安排警报:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值