2014-11-16 2 views
14

Прямо сейчас, я установка сигнализации, как это:Как установить точные, повторяющиеся сигналы тревоги в Android 4.4?

 AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context, AlarmReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

     timedate = cal.getTime(); 

     //convert date to milis 
     long timeInMilis = (timedate.getTime()); 

     //Set Alarm to Repeat 
     manager.setRepeating(AlarmManager.RTC_WAKEUP, timeInMilis, interval, pendingIntent); 

К сожалению, запланированное время для повторения являются неточными, и я читал, что они могут быть неточными для полного интервала!

Итак, я хотел бы переключиться на настройку точной повторяющейся тревоги. Для моего устройства требуется минимум только последний API 19/Android 4.4, поэтому я не могу использовать setRepeating.

Что я могу сделать вместо того, чтобы установить точную повторяющуюся тревогу?

+0

Читать это сообщение: http://stackoverflow.com/questions/24298595/how-to-set-an-exact-repeating-alarm-on-api-19-kitkat –

ответ

27

К сожалению, запланированные сроки для повторения неточны, и я читал, что они могут быть неточными на полный интервал!

Если у вас targetSdkVersion 19 или выше, то да.

Что я могу сделать вместо того, чтобы установить точную повторяющуюся тревогу?

Используйте setExact(), чтобы получить контроль над начальной задержкой. Затем, как часть вашей работы для обработки этого события, используйте setExact(), чтобы получить контроль в следующее необходимое время. IOW, вы сами выполняете «повторяющуюся» часть.

Да, это раздражает.

Преднамеренно раздражает, чтобы управлять разработчиками до , а не использовать точные повторяющиеся сигналы тревоги, поскольку они хуже для батареи, чем их неточные братья. Если пользователь будет воспринимать неточное поведение и не оценит его, не стесняйтесь использовать setExact(), чтобы сделать тревоги, когда пользователь хочет. Однако, если пользователь не будет воспринимать неточное поведение, используйте неточные сигналы тревоги, так как пользователь может заметить воздействие батареи на ваши точные аварийные сигналы.

+0

+1 для быстрого ответа и приятного. полезный –

+0

Мне нужно установить точный повторяющийся сигнал тревоги, потому что это точка моего приложения :(Мне жаль, что я не могу использовать неточность. На мой главный вопрос: я могу использовать SetExact() выше в своем коде, но где я должен планировать будильник еще раз? В широковещательном приемнике? Как? –

+3

@KalaJ: «В широковещательном приемнике?» - учитывая код в вашем вопросе, да. «как?» - путем вызова 'setExact()' на 'AlarmManager' в' onReceive() ', указывая, когда вы хотите снова получить контроль. Имейте в виду, что« точный »является немного неправильным, поскольку Android не является оперативной ОС, и поэтому вы получите контроль около своего начального времени, а не именно в это время. Следовательно, вы захотите вызвать 'setExact()' в вашем 'BroadcastReceiver', чтобы указать, когда вы хотите управлять« для realz », а не просто увеличивать X-время с этого момента или кумулятивный дрейф в течение нескольких циклов тревоги может вызвать некоторые проблемы. – CommonsWare

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