Schedule Background Service funktioniert nicht

  • 2 Antworten
  • Neuester Beitrag
Diskutiere Schedule Background Service funktioniert nicht im Android App Entwicklung im Bereich Betriebssysteme & Apps.
A

AndrejT

Neues Mitglied
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
 
D

deek

Stammgast
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
 
A

AndrejT

Neues Mitglied
@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 - Schedule Background Service funktioniert nicht Antworten Datum
2