A
AndrejT
Neues Mitglied
- 5
Hallo zusammen
Ich möchte in meiner Android Applikation folgendes:
Meine Android Applikation soll alle 5 Minuten den aktuellen Standort dem Server übermitteln (egal ob die App läuft, in Background ist oder killed ist).
Ich habe da nach ein paar Sachen gegooglet und ausprobiert jedoch schlägt alles fehl.
Aktuell habe ich folgendes:
Und aufgerufen wird es folgendermassen:
Es funktioniert aber ziemlich komisch. Wenn die App läuft und in Foreground ist, geht es. Wenn die App aber in Background kommt oder sogar gekillt wird, wird nichts gesendet. Was habe ich falsch gemacht? ist gibt es da eine bessere Lösung?
Beste Grüsse
Ich möchte in meiner Android Applikation folgendes:
Meine Android Applikation soll alle 5 Minuten den aktuellen Standort dem Server übermitteln (egal ob die App läuft, in Background ist oder killed ist).
Ich habe da nach ein paar Sachen gegooglet und ausprobiert jedoch schlägt alles fehl.
Aktuell habe ich folgendes:
Java:
public class BackgroundService extends Service {
private boolean runIt = true;
public static boolean isServiceRunning = false;
@Override
public void onCreate() {
super.onCreate();
sendPosition();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
onTaskRemoved(intent);
sendPosition();
} else {
stopMyService();
}
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onDestroy() {
isServiceRunning = false;
super.onDestroy();
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
restartServiceIntent.setPackage(getPackageName());
startService(restartServiceIntent);
super.onTaskRemoved(rootIntent);
}
void stopMyService() {
stopForeground(true);
stopSelf();
isServiceRunning = false;
}
private void sendPosition() {
if (runIt) {
runIt = false;
Handler handler = new Handler();
Runnable runnable = () -> {
runIt = true;
String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
Log.i("SERVICE START", currentDateTimeString);
MyLocationRequest request = new MyLocationRequest();
request.setDisplayed(true);
Location location = getCurrentLocation();
if (location != null) {
request.setLocation(location);
sendLocation(request);
Log.i("SERVICE END", currentDateTimeString);
} else {
Log.i("SERVICE ERROR", currentDateTimeString);
}
};
handlerDriving.postDelayed(runnable, Constants.FIVE_MINUTES);
}
}
}
Und aufgerufen wird es folgendermassen:
Java:
Intent startIntent = new Intent(getApplicationContext(), BackgroundService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(startIntent);
} else {
startService(startIntent);
}
Es funktioniert aber ziemlich komisch. Wenn die App läuft und in Foreground ist, geht es. Wenn die App aber in Background kommt oder sogar gekillt wird, wird nichts gesendet. Was habe ich falsch gemacht? ist gibt es da eine bessere Lösung?
Beste Grüsse