2014-12-02 3 views
2

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

public void method1() { 
    br = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context c, Intent i) { 
      doTASK(); 
     } 
    }; 
    registerReceiver(br, new IntentFilter("com.XXXX.wakeup")); 
    pi = PendingIntent.getBroadcast(this, 0, 
      new Intent("com.xxxx.wakeup"), 0); 
    am = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE)); 

    setAlarmManagerObject(); 
} 

И setAlarmManagerObject() метод здесь

public void setAlarmManagerObject() { 
    Calendar cal = Calendar.getInstance(); 
    int year = cal.get(Calendar.YEAR); 
    int month = cal.get(Calendar.MONTH); 
    int day = cal.get(Calendar.DAY_OF_MONTH); 
    cal.set(year, month, day 
      , com.XXXX.Constants.AlarmHour 
      , com.xxxx.Constants.AlarmMinute 
      , com.xxxx.AlarmSecond); 

    am.setRepeating(AlarmManager.ELAPSED_REALTIME, cal.getTimeInMillis(), 
      AlarmManager.INTERVAL_DAY, pi); 
} 

Моя проблема заключается в том, что, когда я использовал AlarmManager.RTC_WAKEUP это просыпаются, когда устройство выключено. Я не хочу этого свойства в своем приложении. Поэтому я использовал AlarmManager.ELAPSED_REALTIME, но с диспетчером аварийных сообщений ELAPSED_REALTIME не запускается. Я хочу, чтобы мой диспетчер аварийных сообщений срабатывал точно в одно и то же время. Если устройство выключено или выключено, тогда диспетчер аварийных сигналов также отключится после пробуждения устройства. Он должен срабатывать в точное время. Любая помощь будет действительно оценена.

+0

Я также ищу решение ,? – DJhon

+0

Я ответил с ответом. Пожалуйста, проверьте. – maveroid

+0

ELAPSED_REALTIME: Восстанавливает ожидающее намерение в зависимости от количества времени с момента загрузки устройства, но не пробуждает устройство. Истекшее время включает любое время, в течение которого устройство спало. Возможно, вы захотите попробовать RTC вместо RTC_WAKEUP. –

ответ

0

Вы должны использовать что-то вроде этого: -

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP (or AlarmManager.ELAPSED_REALTIME), 
SystemClock.elapsedRealtime() + Constants.DELAY_IN_MILLIS, 
pendingIntent); 

Вы можете рассчитать DELAY_IN_MILLIS которое время задержки в миллисекундах от текущего системного времени.

Для повторения сигнала тревоги вы можете иметь код что-то вроде этого: -

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
SystemClock.elapsedRealtime() + Constants.DELAY_IN_MILLIS, 
Constants.ONE_DAY_IN_MILLIS, 
pendingIntent); 
+0

Это не работает для меня. – XYZ

+0

В чем проблема, с которой вы сталкиваетесь? – maveroid

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