RTC_WAKEUP不适用于所有设备

时间:2017-01-06 20:20:46

标签: android android-alarms

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

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,因为它除了打印到日志之外什么都不做,而且它不是日历的错误(如果它是,它每次设备没有睡觉时都不会工作。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

无论我尝试哪种选择,它都无法使用该设备。我认为设备的ROM在这方面就已经破了。