Я планирования тревоги, как показано ниже (извините уродливый код, я тестировал):RTC_WAKEUP не работает на всех устройствах
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, поскольку он ничего не делает, кроме печати в журнале, и это не ошибка в календаре (если бы это было так, это не сработало бы каждый раз устройство не спит). Есть идеи?
Вы попробовали 'setAlarmClock()' вместо этого? –
комплектAlarmClock() не работает. Точно такое же поведение наблюдалось. –
Я как-то задал вопрос, похожий на этот вопрос. Похоже, система просто занята, и это требует времени, потому что она не очень мощная. См. Здесь: http://stackoverflow.com/questions/24724859/alarmmanager-setexact-with-wakefulbroadcastreceiver-sometimes-not-exact – MobileMon