RTC_WAKEUP 并非适用于所有设备

RTC_WAKEUP doesn't work on all devices

我正在安排如下警报(请原谅丑陋的代码;我正在测试):

int code = new Random().nextInt();
    Intent bIntent = new Intent(LaunchActivityReceiver.LAUNCH_ACTIVITY_ACTION);
    bIntent.setClass(mContext, LaunchActivityReceiver.class);
    PendingIntent broadcastIntent = PendingIntent.getBroadcast(mContext, code, bIntent, PendingIntent.FLAG_CANCEL_CURRENT);
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), broadcastIntent);

权限:

    <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

日历设置为未来一分钟(我很确定)。顺便说一句,我知道一分钟对于警报来说很短,但它用于测试。我在 8 小时警报上注意到了这个问题。如果屏幕打开,则 BroadcastReceiver 会在整整一分钟后触发(除了打印到 LogCat 外,它 什么都不做 。该应用程序是否在前台并不重要。好的,太好了。

但是,如果屏幕关闭,我的行为会非常奇怪。我已经看到它在 1.5 分钟、3 分钟、5 分钟内开火,而且从来没有(等烦了)。不过,一旦我打开屏幕,警报就会响起(如果还没有的话)。就好像 RTC_WAKEUP 只是被当作 RTC。

这只发生在一些廉价的中国平板电脑上。不过,它是 运行 5.1。我不明白这种奇怪的行为。

这似乎是一个常见问题,但其他人的解决方案无效。我根本没有改变时区或时间,我不需要唤醒 BroadcastReceiver,因为它除了打印到日志外什么都不做,而且它不是日历的错误(如果是,它不会每次都有效设备没有休眠)。有什么想法吗?

无论我尝试了哪些选项,它都无法在该设备上使用。我认为该设备的 ROM 在这方面刚刚损坏。