Schedule Background Service funktioniert nicht

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:
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
 
Punkt 1) Wenn deine App gekillt wird (Beenden erzwingen) dann machst du gar nichts mehr. Keine Change irgendwas zu machen.
Punkt 2) Wenn du startForegroundService machst musst du im Service auch eine Foreground Notification setzen.
Punkt 3) Du hast keine Wiederholung drin. Beim Servicestart wartest du einmal 5 Minuten und schickst dann die Position, danach nicht mehr
 
  • Danke
Reaktionen: swa00
@deek
Punkt 1) Nicht in den Settings dann Beenden erzwingen sondern einfach aus der "Task-Leiste" Die App schliessen.
Punkt 2) Muss ich anschauen wie das geht, dass sagt mir nicht.
Punkt 3) Die wiederholung passiert ja automatisch oder nicht? Wenn ich ein Log im onStartCommand mache, wird dieses Log Infinity-mal wiederholt.
 

Ähnliche Themen

SaniMatthias
Antworten
19
Aufrufe
1.096
swa00
swa00
O
Antworten
15
Aufrufe
3.159
ORHUX
O
K
Antworten
3
Aufrufe
1.221
Kapikalaani
K
Zurück
Oben Unten