Ich versuche App zu erstellen, wo ich alle 1,5,10 Minuten Standortupdates usw. senden muss.Alarm Manager löst nicht rechtzeitig
Wenn App ausgeführt wird, es genau funktioniert, aber wenn es geht in Hintergrund/Sleep-Modus es nicht genau arbeiten.
Ich habe beide Methoden setRepeating/setInExactRepeating
versucht, aber keiner von ihnen im Hintergrundmodus arbeiten.
public static void startSensorAlaram(Context ctx, long minutes) {
AlarmManager alarmManager = (AlarmManager) ctx
.getSystemService(Context.ALARM_SERVICE);
// Alarm_Receiver is a broadcast receiver.
Intent intent = new Intent(ctx, Alaram_Receiver.class);
intent.setAction(Utility.SENSOR_ACTION);
PendingIntent pi = PendingIntent.getBroadcast(ctx, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),minutes,pi);
// alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), minutes, pi);
}
public static void stopAlaramSensor(Context ctx) {
Intent intent = new Intent(ctx, Alaram_Receiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, 1,
intent, 0);
AlarmManager alarmManager = (AlarmManager) ctx
.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
}
Alarm Receiver - Broadcast receiver
public class Alaram_Receiver extends WakefulBroadcastReceiver {
private SharedPreferences sp;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
sp = context.getSharedPreferences(Utility.SHARED_PREFS, 0);
if (intent.getAction().equalsIgnoreCase(Utility.SENSOR_ACTION)) {
if (sp.getBoolean("logged_in", false)) {
// context.startService(new Intent(context,SensorService.class));
startWakefulService(context,new Intent(context,SensorService.class));
} else
Utility.stopAlaramSensor(context);
}
}
}
Note:-
Min API-Version ist 15 und kompilieren Version 23.
Welche Version von Android auf dem Testgerät läuft? – nuuneoi
Es ist Android 5.1 und 6.0 @nuuneoi – moDev
Bitte konsultieren Sie die Dokumentation für ["AlarmManager"] (http://developer.android.com/reference/android/app/AlarmManager.html). Ab KitKat ist 'setRepeating()', wenn Ihre 'targetSdkVersion'> = 19 ist, ungenau. Sie müssen 'setExact()' verwenden und den Alarm jedes Mal erneut für das gewünschte Intervall einstellen. –