在某些设备上(至少在某些设备上,至少根据手册,系统中没有电池保护程序,而客户拒绝安装一个),系统会在几小时后广播警报意图 < / strong>,仅在用户打开设备时。
如果用户在几分钟内设置闹钟,则可以正常工作。如果它在几个小时内设置,它可能会起作用,可能会在几分钟或几小时内关闭,很可能是后者。
这让我感到紧张,正如
我总是得到客户的投诉(可以理解),
我没有他们的通用答案,因为它可能不是 显而易见的问题所在,从哪里排除我的应用程序 “不确定”的行为。
当它出现几个小时错误时,它甚至不是'约会'时间!
我确定目标API&gt; = 19 / KitKat,所以我已经区分了如何设置警报:
PendingIntent pi = PendingIntent.getBroadcast(ctx, 1, i, PendingIntent.FLAG_UPDATE_CURRENT);
if (android.os.Build.VERSION.SDK_INT >= 19)
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calSeqStart.getTimeInMillis(), pi);
else
alarmManager.set(AlarmManager.RTC_WAKEUP, calSeqStart.getTimeInMillis(), pi);
通常,在最新的情况下,它甚至不是API 19设备:
TCT ONE TOUCH TAB 7HD(TAB7HD) OS API级别:16
代码:我确定“calSeqStart”的时间是正确的,这不是问题。
它不能是WakeLock问题,只要BroadcastReceiver获取Intent,它就会记录一条消息,并且该消息也会在错误的时间出现!因此,广播仅在用户开启设备时发送。
在我和其他数百人的地方,它没有任何问题。
我的问题:
此外:
在我的应用程序中,我将警报管理器中的警报设置为AlarmManager.RTC_WAKEUP类型,但是当我使用adb转储警报时,我看到它们被映射到AlarmManager.RTC类型。
这只发生在某些(或至少一个:Alcatel onetouch TAB 7D)设备上。在所有其他设备上,我的应用设置的闹钟会正确唤醒设备(我将其视为按预期“adb shell dumpsys alarm”中的RTC_WAKEUP。
由于它是Android 4.1.1,它不能是AppOpps检查,必须是别的。
使用ADB,我发现只有 deskclock 可以将闹钟设置为WAKEUP,其他应用的所有条目都是非WAKEUP闹钟。