locationManager onLocationChanged wird nicht mehr ausgeführt

  • Antworten:31
Paule
  • Forum-Beiträge: 106

07.04.2020, 14:29:23 via Website

Hallo zusammen,
ich habe folgendes Problem. Seit Android 10 scheint das GPS Tracking nicht mehr zu funktionieren.
Unter 9 ging noch alles wunderbar. Ich habe gesehen, dass bei der Einstellung der App nach der Installation bei der Berechtigung Standort folgendes dran steht "Nur während die App verwendet wird". Was heißt das genau? Nur wenn das Activity sichtbar ist?
Kann man das ihrgend wie ändern? haben sich das die Restriktionen von 9 auf 10 geändert?

danke und Grüße

Kommentieren
mr1000
  • Forum-Beiträge: 86

07.04.2020, 14:44:51 via Website

Hey,

Öffnen Sie auf Ihrem Smartphone die Einstellungen.
Tippen Sie auf Standort und dann App-Berechtigung.
Falls "Standort" nicht angezeigt wird, tippen Sie auf Sicherheit & Standort und dann Standort.
Wenn Sie ein Arbeitsprofil haben, tippen Sie auf Erweitert und dann Standort.
Sehen Sie sich unter "Immer zugelassen" und "Zugriff nur während Nutzung zugelassen" die Apps an, die auf den Standort Ihres Smartphones zugreifen dürfen.
Wenn Sie die Berechtigungen einer App ändern möchten, tippen Sie darauf und wählen Sie dann den entsprechenden Standortzugriff für die App aus.

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

07.04.2020, 14:49:17 via Website

Hallo,

ja klar, das ist ja genau da wo ich das "Nur während die App verwendet wird" sehe!
Meine Frage was heißt das genau? Nur wenn das Activity sichtbar ist?
Kann man das ihrgend wie ändern? haben sich das die Restriktionen von 9 auf 10 geändert?

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.04.2020, 15:35:04 via Website

Was heißt "Seit Android 10 scheint das GPS Tracking nicht mehr zu funktionieren. "?

Bekommst du Fehlermeldungen?
Wird dein onLocationChange Listener nicht mehr aufgerufen?
Wie äußert sich das alles?

Du musst uns schon genaueres sagen, wie deine App funktioniert.
Lesenswert ist auch folgendes: https://proandroiddev.com/android-q-privacy-changes-for-accessing-device-location-1c8e2197d0e2

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

08.04.2020, 08:11:52 via Website

Guten Morgen Pascal,

ja sorry, ich war gestern etwas kurz angebunden!
Klar, ich erkläre mal im Detail.

Ich starte durch einen BroadcastReceiver einen Service bei Neustart. Der Service wiederum ruft in der onStartCommand die MainAcitivity durch ein Ident auf:

Intent i = new Intent();
i.setClassName("com.myapp", "com.myapp.MainActivity");
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

In der onCreate Methode der MainAcitivity starte ich das GPS Tracking setzte aber vorher das Acitivity auf moveTaskToBack(true). Dazu habe ich eine Klasse von LocationListener die über die MainAcitivity gestartet wird mit:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 28000, 80, locationListener);

die Application fängt auch kurzzeitig an GPS Daten zu finden. Hört dann auf.

Ich habe mir den Link mal angeschaut und habe dazu Fragen.
So wie ich das lese muss ich auf jedenfall die Berechtigung ACCESS_BACKGROUND_LOCATION hinzufügen, wenn ich bei API level 29 bin.
Für mich stellt sich eine generelle Frage wo ich mir bisher noch keine Gedanken gemacht haben. Mir ist das nur aufgefallen, weil ich aktuell ein Handy hier liegen habe mit Android Version 10. Diese ganzen Regularien, wie der Einschränkung bei Standort beim Schreiben von Daten in eine Datei, die mit Android Version 10 kommen sind die auch gültig für Apps mit targetSdkVersion < 29. D.h. Wenn ich jetzt in meiner App bei der targetSdkVersion 28 in der build.grandle hinterlege haben ich dann evtl. das Problem dann auch noch? Verstehst du was ich meine?

Dank dir für deine Unterstützung.

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.04.2020, 09:41:39 via Website

Das ist schon sehr komisch. Aber da fällt mir aktuell auch nichts ein.
Am besten gründlich Debuggen und Logs anschauen oder wenn du nach x Zeit kein Wert bekommen hast, einfach den LocationManager nochmals initialisiieren bzw. locationUpdates anfordern.

Wenn du in deiner App targetSdk 28 hinterlegt hast, dann werden die neuen Einschränkungen in Android 10 trotzdem greifen. Nur du wirst unter SDK 28 nicht die Möglichkeit haben, dann entsprechend zu handeln.
Von dem her bringt dir das keinen Vorteil auf SDK 28 zu gehen.
Die Funktionen werden damit auch nicht funktionieren.

Aber: Da du ja kurzzeitig LocationUpdates erhälst istz das keine Sache mit den Berechtigungen.

Ich denke eher dass es mit dem moveTaskToBack zutun hat.
Denn:

Navigate from this activity to the activity specified by upIntent,
finishing this activity in the process

https://developer.android.com/reference/android/app/Activity#moveTaskToBack(boolean)

Dabei wird die Activity beendet, das willst du eigentlich nicht.
Nimm das mal testweise raus und schau was passiert.

Wenn du das komplett im Hintergrund machen willst, muss dein Service das direkt ohne Activity machen, also als BackgroundService,

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

08.04.2020, 10:22:20 via Website

Hallo
Ich verstehe das Thema so ab API 28.

Zugriff auf GPS oder auch die Camera nicht ohne wissen des Users im Hinderrund.

In der Activity wo du die Permission geholt hast geht es.

Neu ist in einen Service musst du die Permission auch abfragen holen anfordern aber in der Activty und an den Service weitereichen.

Zum Thema Hinderrund Service da gibst es nur noch einen Forderrund Service mit Benachrichtigung an den User in der Status Zeile. Sonst wird der Service vom System beendet wenn es denkt.

Solange die Activiy gestartet ist hast du auch die Permission im Service . Ist die Activty beendet nicht mehr.
Ohne sie im Service sie abzufagen.

Das ist bei der Kamera genau so.

Wenn du das komplett im Hintergrund machen willst, muss dein Service das direkt ohne Activity machen, also als BackgroundService,

wird nicht gehn denn eine permission abfrage im service ja, aber das anfordern beim User geht nur in einer Activity nicht im Service.

— geändert am 08.04.2020, 10:28:10

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.04.2020, 10:31:26 via Website

@Jockel: Ja das ist klar, Permissions anfordern in der Activity aber LocationUpdates im Service, so meinte ich das.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

08.04.2020, 11:02:39 via Website

Dann Erstelle mal einen camera manager in einem service. Und versuche sie zu öffnen.
Da will as das du dort eine Abfrage machst auch wenn du die permission in der activity schon hast.

— geändert am 08.04.2020, 11:10:15

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

08.04.2020, 18:27:39 via Website

Hallo zusammen,

ich hatte heute Morgen noch folgendes Probiert.

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 3, locationListener);

damit ich testen kann. Das hat super funktioniert. Ich hab mich nicht bewegt, aber er hat Daten getrackt. Hab dabei mal das Display ausgemacht gewartet oder mal neu gestartet. hat wunderbar funktioniert. dann habe ich es wieder auf

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 28000, 80, locationListener);

gestellt und dann bin ich drei Stunden Später weggefahren und wollte testen und siehe da. Es geht nicht mehr.

Laut den Entwickleroptionen und aktive Dienste läuft der GPS Dienst.

Ich verstehe es nicht. Werde Morgen das gleiche noch einmal machen mit den verringerten Werten.

Ihr schreibt Berechtigung anfordern. Klar ich kann das normalerweise direkt über die App machen, idem ich das beim User abfrage. Das ist doch das Gleiche wie wenn ich in den App-Infos unter Berechtigung gehe und dort unter Standort und dann "immer zulassen" wähle, oder?

Ihr merkt ich bin da noch nicht so Fit drin :-)

Danke

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

08.04.2020, 19:03:26 via Website

Hallo mich würde mal interessieren wie dein Service den du im hintergrund laufen lässt ausschaut.

Ich würde mal testen ob der Service über einen längeren Zeitraum läuft.
Dazu würde ich Daten in eine Datei schreiben die sich im App speichernbereich ohne premision ist.

Benutze dazu einfach die System Zeit in eine text datei. Dann wirst du sehen ob er auch läuft.

Ab Android 8 läuft ein einfacher services nicht weiter im hindergrund.

Wann das System den service stoppt ist schwer vorhersehbar sicher ist das es das macht. Außer einen fordregrund Service, mit notification.

Das mit den permission in der App und das activiren im Menü ist für mich nicht das selbe für das System bestimmt auch nicht.

— geändert am 08.04.2020, 19:59:51

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

08.04.2020, 20:03:16 via Website

Hier der Service:

    public class EndlessService extends Service
    {
    private boolean isServiceStarted = false;

    public IBinder onBind(Intent intent)
    {
        return null;
    }

    public int onStartCommand(Intent intent, int flags, int startId)
    {
        super.onStartCommand(intent, flags, startId);

        if (this.isServiceStarted)
        {
            Log.i(this.getClass().getSimpleName(), "App Service bereits gestartet!");
        }
        else
        {
            this.startGPSTracking();

            Log.i(this.getClass().getSimpleName(), "App Service ist gestartet!");

            this.isServiceStarted = true;
        }

        // by returning this we make sure the service is restarted if the system kills the service
        return START_STICKY;
    }

    public void onCreate(){
        super.onCreate();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            Notification notification = createNotification();
            startForeground(10, notification);
        }
        else
        {
            Intent endlessServiceIntent = new Intent(getApplicationContext(), EndlessService.class);

            if(endlessServiceIntent != null)
            {
                Notification notification = createNotificationSmaler26Mode();
                startForeground(10, notification);
            }
        }
    }

    /**
     *
     */
    public void onDestroy()
    {
        super.onDestroy();

        Log.i(this.getClass().getSimpleName(), "App Service wurde beendet - Destroy".toUpperCase());
    }


    private Notification createNotification()
    {
        String notificationChannelId = "ENDLESS SERVICE CHANNEL";
        Notification newMessageNotification = null;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationManager notificationManager = getSystemService(NotificationManager.class);

            NotificationChannel serviceChannel = new NotificationChannel(
                    notificationChannelId,
                    "Notification",
                    NotificationManager.IMPORTANCE_HIGH
            );

            serviceChannel.setDescription("Notification");
            serviceChannel.enableLights(false);
            serviceChannel.setLightColor(Color.RED);
            serviceChannel.enableVibration(false);
            long a[] = {100, 200, 300, 400, 500, 400, 300, 200, 400};
            serviceChannel.setVibrationPattern(a);


            notificationManager.createNotificationChannel(serviceChannel);

            Intent notificationIntent = new Intent(getApplicationContext(), MainActivity.class);

            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

            newMessageNotification = new Notification.Builder(this, notificationChannelId)
                    .setContentTitle("Notifications")
                    .setContentText("Notifications")
                    .setContentIntent(pendingIntent)
                    .setTicker("")
                    .setPriority(Notification.PRIORITY_HIGH) 
                    .build();

        }

        return newMessageNotification;
    }

    /**
     *
     * @return
     */
    private Notification createNotificationSmaler26Mode()
    {
        Intent notificationIntent = new Intent(getApplicationContext(), MainActivity.class);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

        Notification noti = new Notification.Builder(getApplicationContext())
                .setContentTitle("Notifications")
                .setContentText("Notifications")
                .setContentIntent(pendingIntent)
                .build();

        return noti;
    }

    /**
     *
     */
    public void startGPSTracking()
    {
        APPLocationListener appLocationListener = new APPLocationListener(getBaseContext());

        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        if (ContextCompat.checkSelfPermission(EndlessService.this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
        {
            if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
            {
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 25000, 80, appLocationListener);

                Log.i(this.getClass().getSimpleName(), "GPS Tracking hat begonnen!");
            }
        }
    }
}

Unter Android 9 ging alles wunderbar!

Danke!

— geändert am 08.04.2020, 20:07:41

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

08.04.2020, 20:06:13 via Website

Ach so und das rufe ich aus dem BroadcastReceiver unter onReceive wie folgt auf nach dem Neustart:

Intent endlessServiceIntent = new Intent(contextForTimer, EndlessService.class);
endlessServiceIntent.setAction("START");
contextForTimer.startForegroundService(endlessServiceIntent);
Hilfreich?
Kommentieren
swa00
  • Forum-Beiträge: 3.704

08.04.2020, 20:18:29 via Website

Hallo Paule,

ich habe Folgendes schon länger nicht mehr umgesetzt, da kein Bedarf war.
Ich vermute , es wird sich mit veränderten Restriktionen auch unter API 29 umsetzen lassen.

a) Starte deinen Service wie gewohnt als background
b) Beende ihn nach einer Zeit selbständig - z.b. 5Min
c) Mit dem Alarmmanager (oder was immer du jetzt bevorzugst) startest du den Service erneut (nach 6 Min)

Das Ganze nennt sich dann Heartbeat.

Damit hatte ich immer gute Ergebnisse , bis halt auf das zeitliche "Loch" in der Restart-Pause.

Hier mal auf die Schnelle etwas Ähnliches gefunden :
https://medium.com/@benexus/background-services-in-android-o-862121d96c95

— geändert am 08.04.2020, 20:30:10

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

08.04.2020, 21:13:54 via Website

Hallo danke für den Code. Der Service sollte laufen nicht vom System gekillt werden.

Aber ab api 29 sind einige Änderungen bei bei Diensten die Daten sammeln. Dazu zählt die camera, mikro, GPS....

GPS habe ich noch nicht getestet. Bei der Camera ist es so.
Da ist eine Abfrage der premissoin im Service notwendig. Damit auch im hindergrund Bilder gemacht werden.
Bilder werden gemacht aber die haben keinen Inhalt. Ohne die Abfrage. Ist die dazugehörigen activity gestartet geht es auch. Nach dem beenden nicht Mehr.

Denke bei GPS ist es ähnlich.

— geändert am 08.04.2020, 21:16:12

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

20.04.2020, 12:24:43 via Website

Hallo zusammen,

ich komme leider erst heute noch mal zu dem Thema.
Ich habe nun mal ein File-Logging gemacht und dabei ist mir aufgefallen, dass LocationListener die Methoden onProviderDisabled und onProviderEnabled selbständig aufgerufen werden ohne das ich aktiv das GPS über die Einstellungen ein- oder ausschalte. Wie kann das sein? Die Methoden werden doch eigentlich nur aufgerufen, wenn man aktiv das GPS in den Einstellungen aktiviert oder deaktiviert, oder?

Oder werden diese auch aufgerufen, wenn kein GPS oder schlechter GPS-Empfang vorhanden ist?

Manchmal liegen zwischen dem Aufruf von onProviderDisabled und onProviderEnabled meherre Minuten bis Stunden?

Grüße Paule

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

21.04.2020, 19:38:56 via Website

Hallo,

ich habe noch ein Problem.
ich wollte meine Methode zu tracken noch so aufbauen, dass ich auch über den Mobilfunk GPS Daten tracken kann. Zumindest verstehe ich den NETWORK_PROVIDER so. Ist das korrekt?
NETWORK_PROVIDER = Mobilfunk LTE, HSDP usw.
und
GPS_PROVIDER = GPS

Wenn dem so ist, dann verstehe ich erneut nicht warum folgendes nicht klappt:

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);

if(locationManager != null && appLocationListener != null)
{
    Log.i(this.getClass().getSimpleName(), "TRACKING: Neustart LocationManager");

    locationManager.removeUpdates(appLocationListener);
}

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

String provider = locationManager.getBestProvider(criteria, true);

if (provider != null)
{
    Log.i(this.getClass().getSimpleName(), "TRACKING: Provider " + provider + " gefunden!");

    appLocationListener = new APPLocationListener(getBaseContext(), provider);

    locationManager.requestLocationUpdates(provider, 1000, 10, appLocationListener, Looper.getMainLooper());
}
else
{
    Log.i(this.getClass().getSimpleName(), "TRACKING: Kein Provider (GPS oder NETWORK) gefunden!");
 }

Dies läuft in einer Methode in meinem Service. Die MEthode wird alle 5 Minuten aufgerufen um entweder über GWS oder das Netzwerk zu tracken.

Wenn ich GPS aktivere funktioniert es. WEnn ich GPS deaktiviere und nur Mobile Daten, also LTE, an habe dann läuft er in den Else Zweig "TRACKING: Kein Provider (GPS oder NETWORK) gefunden!".

Warum? getBestProvider gibt mir null zurück wenn ich nur Mobile Daten, also LTE, an habe.

Wäre super, wenn mich noch einmal jemand unterstützen könnte.

Grüße Paule

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

21.04.2020, 19:42:39 via Website

Bist du dir sicher dass du nur das GPS deaktiviert hast und nicht den "Standort".
Denn mit deaktiviertem Standort Dienst ist meiner Meinung nach auch keine NetworkLocation möglich

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

21.04.2020, 19:49:18 via Website

Was meinst du denn mit "Standort" deaktiviert? Die Berechtigung?

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

21.04.2020, 19:53:18 via App

Ich kann bei mir nur die Hohe Genauigkeit also GPS abschalten.
Schalte ich aber den Standortdienst im System aus bekomme ich keine Informationen zum Standort egal ob GPS oder Network:
Uploaded by ME

Also wenn Standort verwenden abgeschaltet ist bekommst du auch keine Informationen.

— geändert am 21.04.2020, 19:54:10

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

21.04.2020, 20:11:31 via Website

Ok. Ich glaube ich verstehe etwas grundlegendes falsch.
Bei mir ist folgendes aktiv:
image

Das rote sind die Mobilen Daten. Das Gelbe sind GPS bzw. Standort und da liegt der Hund begraben glaube ich. Das habe ich falsch verstanden.
Ich habe NETWORK_PROVIDER so verstanden das das die GPS-Daten aus den Mobilen Daten, also LTE etc., entnimmt, also Rot und GPS_PROVIDER die GPS-Daten aus dem Gelben.

Es ist jedoch so, dass die Aktivierung der mobilen Daten, rot, gar nix damit zu tun hat, sondern es muss für NETWORK_PROVIDER und GPS_PROVIDER nur der Standort, gelb, aktiv sein. Das System sucht sich dann die GPS Daten entweder über den GPS Provider oder den Netzwerk Provider.

Habe ich das so jetzt richtig verstanden?

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

21.04.2020, 20:26:46 via Website

Genau so ist es richtig.
So sagt das auch der Google Support: https://support.google.com/accounts/answer/3467281?hl=en

Wenn der Standortdienst ausgeschaltet ist, dann kannst du auch keinen Netzwerkstandort bekommen, da dies ein Teil des Standortes ist.

Die einzelnen Provider geben nur die Genauigkeit wieder und variieren in der Schnelligkeit der Ergebnisse.
So bekommst du über den Netzwerk Provider schneller Location Daten als bei GPS, denn wenn du in Gebäuden bist und es kein GPS Empfang gibt.
Je nachdem wie es eingestellt ist werden die Provider auch kombiniert.
Es gibt Projekte die versuchen die unterschiedlichen Standortdaten zusammenzurechnen um das best mögliche Ergebnis zu erziehlen.

Was wolltest du damit machen?

PS: Du kannst die GPS Genauigkeit schon abschalten, dabei muss aber der Standortdienst eingeschaltet bleiben.
Passiert u.a. bei vielen ROMs im Energiesparmodus

— geändert am 21.04.2020, 20:28:47

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

15.06.2020, 15:14:30 via Website

Hallo Pascal,

ich melde mich nach langer Zeit zurück. Ich habe meine App jetzt über ein paar Wochen mal testen lassen und dabei ist unter Android 10 folgendes aufgefallen, du hast es oben auch schon angesprochen "Energiesparmodus".

Die App funktioniert so weit super. Es gab immer mal wieder aussetzter bei der Erfassung von GPS-Daten. Es wurde nichts mehr getrackt. Ihrgend wann hatte ich den Batteriestand in Verdacht und habe das mal explizit getestet. Sobald der Energiesparmodus eines Android 10 Handys angeht wird nicht mehr zuverlässig getrackt über GPS. Meine Theorie hat sich dann bestätigt, das scheinbar im Energiesparmodus das Lesen von GPS-Daten nur noch geht, wenn der Bildschirm an ist.

So jetzt stehe ich hier und weiß erneut nicht weiter.

Da meine Services auch wenn der Energiesparmodus an ist, grundsätzlich funktionieren, dass sehe ich am Log, kann es daran nicht liegen.

Die Akku-Optimierung haben wir auch schon für die App deaktiviert, so das eigentlich das tracken weiter funktionieren müsste, oder?

Ich habe keine Idee wie ich das lösen kann.

Vielleicht gibt es hier auch schon Lösungsansätze. Wenn ich suche bekomme ich nicht programmtechnsiches sondern nur wie man den Energiesparmodus aktiviert und deaktiviert manuell :-)

Danke und grüße

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

15.06.2020, 15:31:21 via Website

Hallo kann dir hier nicht viel sagen.
Nur soviel auch wenn dein Service laut log läuft also nicht beenden ist. Muss das tracken nicht unbedingt weiterlaufen. Das entscheidet Android selber unabhängig. Enteident ist dabei auch wielange ein Service läuft wie oft er benutzt wird wielange wie oft dabei der Bildschirm an war.... An diesem Fakten entscheidet Android wieviel es dem Service Rechenzeit im hinderund gibt.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

15.06.2020, 15:44:31 via Website

Packe mal in deinen Service einen einfachen timer der jede min ausgeführt wird und die Zeit in eine Datei schreibt. Welche Abstände dich nach einiger Zeit im hindergrund einstellen. Wie die Abstände nach einem Bildschirm on sind. Und wie sie nach dem Aufruf der zugehörigen Activity sind. Oder wenn das Handy mal ein zwei Tage nicht benutzt wird. Du wirst überrascht sein.

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

15.06.2020, 16:03:58 via Website

Hallo Jokel,

mir ist klar, dass auch wenn der Service weiterläuft nicht zwangsläufig getrackt wird. Ich habe ja geloggt und dadurch ja festgestellt das alles klappt bis zum Erergiesparmodus. Ich hatte ja auch hier im Thread den Tipp bekommen das Tracken nach einer gewissen Zeit neu zu initialisieren. Das hat auch super funktioniert!

Mein Problem ist jetzt der Energiesparmodus.
Ich hatte zumindest gehofft diesen komplett abschalten zu können, nicht programmiertechnisch, sondern auf den Geräten selber, aber auch hier finde ich nur die Option, dass man ihn erst bei 5Prozent anschaltet. Aber keine Option, dass man das komplett deaktivieren kann.

Hier geht es nicht um eine App für den Playstore von daher die Frage. Kann man irgend wie ob manuell oder programmiertechnisch dem Energiesparmodus mitteilen, führe weiter das GPS tracking aus, salopp gesagt oder gibt es sonstige Möglichkeiten den Energiesparmodus manuell zu deaktivieren kleiner 5Prozent?

Irgend eine Möglichkeit muss es ja geben. Es gibt ja einen haufen Trackingapps die machen doch nicht alles Schlapp beim einschalten des Energiesparmoduses oder das man den Bildschirm dafür anlassen muss um das die App weiter trackt.

Grüße

— geändert am 15.06.2020, 16:04:39

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

15.06.2020, 16:31:02 via Website

Ich glaube das mit den 5 Prozent verstehst du falsch. Ab 5% geht das Handy in einen besonderen Energiespar Modus. Da wird das tracking auch bei andern Apps eingestellt werden.
Ps
Ich denke du meist 5 bis 0 oder?

— geändert am 15.06.2020, 16:33:14

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

15.06.2020, 16:39:58 via Website

Was du eigentlich willst suchst ist das abschalten des Energiespar Modus nicht einschalten. Wenn eingeschaltet spart er und trackt weniger oder garnicht. Es heißt ja auch Energiespar Modus. Also weniger Verbrauch des Akkus.

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

16.06.2020, 13:14:39 via Website

Hallo Jokel,

Ich glaube das mit den 5 Prozent verstehst du falsch. Ab 5% geht das Handy in einen besonderen Energiespar Modus. Da wird das tracking auch bei andern Apps eingestellt werden.

Ich weiß das er in den Energiesparmodus geht, wenn man das so einstellt :-). Per Standard liegt der Wert ja glaube ich bei 15% und dann wird man gefragt, ob man den Energiesparmodus aktivieren will. Man kann aber auch einen kleinerer Wert 5% (darunter geht leider nichts) dann wird man nicht mehr gefragt sondern der Energiesparmodus wird ohne Nachfrage aktiviert.
Es gibt doch jede Menge tracking Apps, haben die alle das Problem, dass im Energiesparmodus das Tracking nur noch funktioniert, wenn das Display aktiv ist? Das kann ich mir nicht vorstellen. Gibt doch auch Apps wo man sein Handy orten kann, wenn es verschwunden ist. Ist es dort überall so, dass wenn der Energiesparmodus an ist, keine Ortung mehr möglich ist? mmmm! Das kann ich mir nicht vorstellen.

Ich denke du meist 5 bis 0 oder?

Genau, dass meine ich. Kann ich dem Handy manuelle oder programmiertechnisch sagen, frag nicht nach dem Energiesparmodus und schalt ihn auch nicht ein?

Was du eigentlich willst suchst ist das abschalten des Energiespar Modus nicht einschalten. Wenn eingeschaltet spart er und trackt weniger oder garnicht. Es heißt ja auch Energiespar Modus. Also weniger Verbrauch des Akkus.

Ja, genau.Hab ich das oben anders geschrieben. Ich meinte natürlich abschalten!

danke für deine Unerstützung!

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

16.06.2020, 15:04:07 via Website

Das orten geht immer das ist fest im Kernel verankert. Das läuft erstens über die funkzellen in denen du eingeloggt bist. Und über den Kernel.
Denn auch gps ist im Linux Kernel.
Wenn du selber dein Handy suchst wird das über FCM gemacht auch das ist fest im Kernel verankert und läuft immer.
Somit ist es immer möglich eine FCM Nachricht zu empfangen was zb auch wathsapp macht puch Nachrichten.

Du stößt somit dein Handy mit einer FCM Nachricht an das es dir die GPS Daten schicken soll das ist fest im Android verbaut wird wenn activirt auch bis zum Ende der Akku Zeit laufen.

Ob du den Energiespar Modus abstellen kannst weiß ich nicht glaube nein. 5% ist ja schon tief. Das ist bestimmt auch wider tief im System.

Um da hinzukommen wirst du dich mit NDK Programmierung beschäftigen müssen. Native c Programmierung. Unter andoid. Auf dieser Ebene werden es die anderen Apps wohl auch machen.

Wie das bei den anderen Apps ist keine Ahnung teste es doch einfach mal dann weißt du es.

— geändert am 16.06.2020, 15:11:10

Hilfreich?
Kommentieren
Paule
  • Forum-Beiträge: 106

16.06.2020, 15:52:37 via Website

ja ok, mit der FCM Nachricht erklärt das sehr gut, warum zu eine "Handy-verloren-Suchfunktion" funktioniert. Muss ich auch mal lesen. OK, dann ist mir aber jetzt klar, dass ich hier nicht tricksen kann und das System dazu nötige weiter GPS Daten zu senden.

Bisschen blöde. Ich schau mir aber mal FCM Nachrichten an. was das genau ist.

Hilfreich?
Kommentieren