2016-01-09 3 views
-2

Я пытаюсь сделать уведомление о расписании в Android, даже если интернет-соединение отсутствует. Я пробовал и добился успеха в SystemClock, но не для Календаря. Мой код:В Android, для диспетчера аварийных сообщений, SystemClock, elapsedRealTIme() работает, но alarmStartTime.getTimeInMillis не работает

AlarmManager alarmManager; 
Intent alarmIntent; 
PendingIntent pendingIntent; 
Calendar alarmStartTime = Calendar.getInstance(); 

alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmIntent = new Intent(Splash.this, AlarmReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(Splash.this, 0, alarmIntent, 0); 

    alarmStartTime.set(Calendar.HOUR_OF_DAY, 11); 
    alarmStartTime.set(Calendar.MINUTE, 32); 
    alarmStartTime.set(Calendar.SECOND, 0); 

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, alarmStartTime.getTimeInMillis(), 30 * 1000, pendingIntent); 

Это не работает. Но следующая строка работает нормально. Его запуск каждые 30 секунд времени.

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 30 * 1000, pendingIntent); 

Я хочу, чтобы мои приложения запускались каждые 8:00. Как мне это сделать.

ответ

0

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

https://developer.android.com/reference/android/app/AlarmManager.html

0

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

alarmStartTime.set(Calendar.HOUR_OF_DAY, 08); 
    alarmStartTime.set(Calendar.MINUTE, 00); 
    alarmStartTime.set(Calendar.SECOND, 00); 

и во время разговора я использовал как:

alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), getInterval(), pendingIntent); 

и установить метод интервального один день, так что она просыпается всегда 8AM.

private int getInterval(){ 
    int days = 1; 
    int hours = 24; 
    int minutes = 60; 
    int seconds = 60; 
    int milliseconds = 1000; 
    int repeatMS = days * hours * minutes * seconds * milliseconds; 
    return repeatMS; 
}