2015-03-25 4 views
1

Есть ли альтернатива setExact() методу AlarmManager? Я хочу показывать уведомления о точном времени, но я не хочу поднять мою minSdkVersion на 19. Теперь я использую метод set() AlarmManager, но аварийные сигналы, запланированные далеко в будущем, не сообщают пользователю в точное время (но cca 10 минут спустя). Теперь я использую minSdkVersion 16 и 21. targetSdkVersion я нашел на Android разработчиков записку, в которой говорится:Уведомление Android о точном времени

Примечание: Начиная с API 19, время запуска передается этому методу рассматривается как неточное: тревога не будет до этого времени, но может быть отложено и доставлено через некоторое время. ОС будет использовать эту политику, чтобы «пакетные» сигналы тревоги были объединены во всей системе, сводя к минимуму количество раз, когда устройство должно «просыпаться» и минимизировать использование батареи. В общем случае аварийные сигналы, запланированные в ближайшем будущем, не будут отложены до тех пор, пока тревога запланирована далеко в будущем. С новой политикой дозирования гарантии доставки не так сильны, как раньше. Если приложение устанавливает несколько аварийных сигналов, возможно, что фактический порядок доставки этих аварийных сигналов может не соответствовать порядку их запрошенных сроков доставки. Если ваше приложение имеет сильные требования к заказу, есть другие API, которые вы можете использовать для получения необходимого поведения; см. setWindow (int, long, long, PendingIntent) и setExact (int, long, PendingIntent). Приложения, чья targetSdkVersion перед API 19 будет продолжать получать предыдущее поведение тревоги: все их запланированные аварийные сигналы будут считаться точными.

Но использование setExact() или setWindow() для меня не является решением. Спасибо за ответ.

ответ

2

Проверьте текущий уровень API.
Если ниже 19, используйте set(), в противном случае используйте setExact().

Чтобы проверить версию операционной системы, использовать что-то вроде этого:

В вашем импорт раздела:

import android.os.Build; 

В своих декларациях:

protected static final int Build_Version = Build.VERSION.SDK_INT; 

Тогда легко проверить

if(Build_Version < 19) 
{ 
    // Use set()... 
} 
else 
{ 
    // Use setExact()... 
} 
+0

Спасибо за поддержку er, я уже использовал именно это вчера, и это сработало! Но @SuppressLint («NewApi») был необходим, потому что у меня еще есть minSdkVersion, установленный на 16. – PetoPeto

+0

Фантастический. Следующий шаг: примите мой ответ, чтобы удалить его из очереди без ответа. –

+0

Хорошо, но я не могу найти вариант для принятия вашего ответа. Где я могу найти его ? – PetoPeto

Смежные вопросы