AlarmManager случайно повторяет сигнал тревоги, когда телефон не используется
Я называю фонService
с интервалом 30 минут для считывания широты / долготы текущего местоположения и отправки его на сервер через POST API.
я используюsetRepeating()
методAlarmManager
Класс для планирования будильника каждые 30 минут. Но иногда сигнал тревоги пропускается, и сервис не вызывается. Чтобы отслеживать, вызывается или нет сигнал тревоги каждые 30 минут, я создал файл Log.txt в SDCard. При каждом вызове будильника запись о текущем времени будет записана в файл Log.txt. Но после сравнения от 4 до 5 устройств в файлах Log.txt я заметил, что для некоторых устройств тревога не вызываетonCreate()
методUserTrackingReceiver.java
(Фоновая служба). Полные фрагменты кода, упомянутые ниже.
Когда приложение запускаетсяregisterUserTrackingReceiver()
Метод был вызван ниже:
public static void registerUserTrackingReceiver(Context context) {
try {
Intent intent = new Intent(context, UserTrackingReceiver.class);
boolean alarmUp = (PendingIntent.getService(context, 1001, intent, PendingIntent.FLAG_NO_CREATE) == null);
if (alarmUp) {
Calendar calendar = Calendar.getInstance();
if (calendar.get(Calendar.MINUTE) > 0 && calendar.get(Calendar.MINUTE) <= 30) {
calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND, 0);
} else if (calendar.get(Calendar.MINUTE) > 30) {
if (calendar.get(Calendar.HOUR_OF_DAY) == 23) {
calendar.set(Calendar.HOUR_OF_DAY, 0);
} else {
calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + 1);
}
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
} else {
calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
}
PendingIntent sender = PendingIntent.getService(context, 1001, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_HALF_HOUR, sender);
}
} catch (Exception e) {
e.printStackTrace();
}
}
UserTrackingReceiver.java ниже:
public class UserTrackingReceiver extends Service
implements LocationListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
@Override
public void onCreate() {
super.onCreate();
Calendar calendar = Calendar.getInstance();
Util.appendLog("Tracking Alarm Called on: " + calendar.get(Calendar.HOUR_OF_DAY) + " : " + calendar.get(Calendar.MINUTE) + " : " + calendar.get(Calendar.SECOND));
stopSelf();
}
}
ВUtil.java естьappendLog()
метод, который ниже:
public static void appendLog(String text) {
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
File logFile = new File(baseDir + "/" + Constant.AppNameSuper + "/log.txt");
if (!logFile.exists()) {
try {
logFile.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
//BufferedWriter for performance, true to set append to file flag
BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true));
buf.append(text);
buf.newLine();
buf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Если сигнал тревоги вызывается каждые 30 минут в соответствии с приведенным выше кодом, он должен быть записан в файле Log.txt на SDCARD. Но проблема в том, что он не может записывать файл журнала каждые 30 минут, что означает отсутствие тревоги. Что касается чтения в течение двух дней, я заметил, что будильник не пропадает в дневное время, поскольку пользователь постоянно использует свой телефон, но он пропускается ночью, когда телефон не используется.
Из приведенных лог-файлов с разных устройств ниже:
Устройство A Log.txt
Отслеживание тревоги: 0: 0: 31 (начало с 12:00 ночи)Отслеживание тревоги: 1: 10: 27Отслеживание тревоги: 3: 5: 25Отслеживание тревоги вызвано: 6: 55: 31Отслеживание тревоги вызвано: 7: 0: 6Отслеживание тревоги вызвано: 7: 30: 0Отслеживание тревоги вызвано: 8: 0: 6Отслеживание тревоги вызвано: 8: 30: 0Отслеживание тревоги вызвано: 9: 0: 6Отслеживание тревоги вызвано: 9: 30: 0Отслеживание тревоги вызвано: 10: 0: 0Устройство B Log.txt
Отслеживание тревоги: 0: 0: 27 (начало с 12:00 ночи)Отслеживание тревоги вызвано: 0: 30: 1Отслеживание тревоги вызвано: 1: 0: 1Отслеживание тревоги вызвано: 1: 30: 2Отслеживание тревоги вызвано: 2: 0: 1Отслеживание тревоги вызвано: 2: 30: 1Отслеживание тревоги вызвано: 3: 0: 1Отслеживание тревоги вызвано: 3: 30: 1Отслеживание тревоги вызвано: 4: 0: 1Отслеживание тревоги вызвано: 4: 30: 29Отслеживание тревоги вызвано: 5: 0: 1Отслеживание тревоги вызвано: 5: 30: 2Отслеживание тревоги вызвано: 6: 0: 30Отслеживание тревоги вызвано: 6: 30: 1Отслеживание тревоги вызвано: 7: 0: 1Отслеживание тревоги вызвано: 7: 30: 1Отслеживание тревоги вызвано: 8: 0: 1Отслеживание тревоги вызвано: 8: 30: 1Отслеживание тревоги вызвано: 9: 0: 32Отслеживание тревоги вызвано: 9: 30: 1Устройство C Log.txt
Отслеживание тревоги: 0: 0: 7 (начало с 12:00 ночи)Отслеживание тревоги вызвано: 0: 30: 3Отслеживание тревоги вызвано: 1: 0: 6Отслеживание тревоги вызвано: 1: 30: 1Отслеживание тревоги вызвано: 2: 0: 32Отслеживание тревоги вызвано: 2: 30: 3Отслеживание тревоги: 3: 1: 50Отслеживание тревоги вызвано: 3: 30: 5Отслеживание тревоги: 4: 1: 58Отслеживание тревоги: 4: 31: 14Отслеживание тревоги вызвано: 5: 0: 1Отслеживание тревоги вызвано: 5: 30: 1Отслеживание тревоги вызвано: 6: 2: 1Отслеживание тревоги вызвано: 6: 30: 1Отслеживание тревоги вызвано: 7: 0: 1Отслеживание тревоги вызвано: 7: 30: 1Отслеживание тревоги вызвано: 8: 0: 1Отслеживание тревоги вызвано: 8: 30: 4Отслеживание тревоги вызвано: 9: 1: 44Отслеживание тревоги вызвано: 9: 30: 1Устройство D Log.txt
Отслеживание тревоги: 0: 1: 25 (начало с 12:00 ночи)Отслеживание тревоги вызвано: 0: 30: 0Отслеживание тревоги: 1: 31: 41Отслеживаемая тревога. Вызов: 2: 39: 52.Отслеживание тревоги вызвано: 3: 0: 25Отслеживание тревоги: 3: 30: 58Отслеживание тревоги вызвано: 4: 0: 25Отслеживание тревоги: 4: 30: 56Отслеживание тревоги вызвано: 5: 30: 51Отслеживание тревоги вызвано: 7: 18: 55Отслеживание тревоги вызвано: 7: 30: 0Отслеживание тревоги вызвано: 8: 0: 25Отслеживание тревоги вызвано: 8: 30: 43Отслеживание тревоги вызвано: 9: 0: 3Отслеживание тревоги вызвано: 9: 30: 25Отслеживание тревоги вызвано: 10: 0: 25Отслеживание тревоги вызвано: 10: 30: 4Отслеживание тревоги: 11: 1: 52Отслеживание тревоги: 11: 30: 27Отслеживание тревоги вызвано: 12: 1: 6