2013-05-14 2 views
2

У меня есть настройка повторного диспетчера аварийных сигналов, чтобы запустить сервис, который извлекает местоположение и отправляет SMS, но в настоящее время я записываю только продолжительность времени в файле, чтобы проверить точность сигнала ,стартовый сервис, который повторяется в начале каждого часа и извлекает информацию с фиксированным интервалом времени

Я нахожу, что диспетчер аварийной сигнализации не работает нормально, я установил один интервал времени, но он выстрелил через 30 мин. промежуток. Я оставил его на один день и обнаружил, что после 12 часов часы точность сигнала правильная. Что происходит ??

Мой класс активности, которые начинаются тревоги:

enter code here 

     public static final long ALARM_TRIGGER_AT_TIME = SystemClock.elapsedRealtime() + 20000; 
     public static final long ALARM_INTERVAL = 1000 * 60 * 60 ; 

     AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 

     Intent myIntent = new Intent(AutoMainActivity.this, TrackerService.class); 

     pendingIntent = PendingIntent.getService(AutoMainActivity.this, 0, myIntent, 0); 

     alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,ALARM_TRIGGER_AT_TIME, 1000 * 60 * 60,pendingIntent);  

И мой класс обслуживания:

TraceService : 

    public void onStart(Intent intent, int startId) { 
    super.onStart(intent, startId); 

    //writing in file to view time 
    java.util.Date systemDates = Calendar.getInstance().getTime(); 
    simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss"); 
    currentTime = simpleDateFormat.format(systemDates); 

      // create file and write current time 
    generateNoteOnSD("ONSTART"+currentTime+"\n","Onstart.txt"); 

} 

После выполнения этого приложения в 3:18 PM время .Отель файл, созданный службы показывают время срабатывания будильника ,Проверьте это:

alarm manager time 

ONSTART2013-05-13-15: 18: 26

ONSTART2013-05-13-15: 21: 58

ONSTART2013-05-13-15: 54: 21

ONSTART2013-05-13-16: 18: 25

ONSTART2013-05-13-17: 18: 26

ONSTART2013-05-13-17: 49: 21

ONSTART2013-05-13-18: 18: 25

ONSTART2013-05-13-19: 18: 28

ONSTART2013-05-13-20: 10: 51

ONSTART2013 -05-13-20: 18: 29

ONSTART2013-05-13-20: 48: 49

ONSTART2013-05-13-21: 18: 30

ONSTART2013-05-13-21: 58: 58

ONSTART2013-05-13-22: 18: 38

ONSTART2013-05-13-22: 56: 00

ONSTART2013-05- 13-23: 18: 43

ONSTART2013-05-13-23: 48: 49

ONSTART2013-05-14-00: 18: 44

ONSTART2013-05-14-01: 18 : 45

ONSTART2013-05-14-02: 18: 45

ONSTART2013-05-14-03: 18: 45

ONSTART2013-05-14-04: 18: 45

ONSTART2013-05 -14-05: 18: 44

ONSTART2013-05-14-06: 18: 44

ONSTART2013-05-14-07: 18: 44

Вы можете проверить, что при запуске менеджера сигнализации в 15: 1 8 вечера, он начинается снова через 30 минут. ок. Но после 12 часов он работает нормально !!! Как это исправить. Мне нужно, чтобы тревога начиналась каждый час не раньше этого.

+0

Вы уверены, что код настройки тревоги только один раз? 'alarmManager.setRepeating ...' –

+0

Я вызываю диспетчер аварийной сигнализации один раз, и он повторяет сигнал тревоги, но время не фиксировано. –

ответ

1

Попробуйте с AlarmManager.RTC_WAKEUP один раз вместо AlarmManager.ELAPSED_REALTIME_WAKEUP Существует пример в этом: Alarm Manager Example

+0

хорошо, мне нужно проверить thks –

+0

Я получил этот результат после изменения на RTC_WAKEUP: 1). Сначала в 09:57:12 2). В 09:58:03 3). В 10:28:27 4). В 11:28:27 После первого срабатывания триггера срабатывает нормально. Тем не менее я жду большего результата. –

0

Я подозреваю, что у вас несколько аварийных сигналов в ожидании. Я бы рекомендовал вам очистить все ваши аварийные сигналы, прежде чем устанавливать этот.

public void onStart(Intent intent, int startId) { 
    super.onStart(intent, startId); 

    // Cancel alarms 
    try { 
     alarmManager.cancel(intent); 
    } catch (Exception e) { 
     Log.e(TAG, "AlarmManager update was not canceled. " + e.toString()); 
    } 
} 

(как отменить сигналы ответа хорошо this answer)

0

Не уверен, почему все усложняет этот вопрос так много. Я вижу это повсюду. Ответы и ответы о вычислении следующего часа.

Нет необходимости ничего рассчитать. ЧАС из календаря и используйте это как интервал. HOUR вызывается каждый раз, когда изменяется час. Это все на самом деле.

Некоторым устройствам может потребоваться небольшая настройка, чтобы удостовериться, что HOUR, который вызывается, не один и тот же раз подряд. Это связано с некоторыми устройствами, вызывающими HOUR иногда, когда изменяется минута.

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

  • Нет связанных вопросов^_^