Zuverlässige GPS abfragen

S

SlayNox

Ambitioniertes Mitglied
Threadstarter
Also ich habe es soweit mal eingebunden und bin grade am testen dran. Funktioniert an sich sehr gut uns zuverlässig.
Intervall ist bei mir mal auf 1 minute gesetzt.

Jedoch fällt mir auf das, sobald das Gerät in den DeepSleep geht die übertragung nur noch ziemlich genau alle 5 minuten Stattfindet.

Am Alarmmanger liegt das denke ich nicht. Ich denke eher das dies am FusedLocationProvider liegt. Denn es kommt nur dann ein Upload zustande wenn dieser GPS erfolgreich abgefragt hat. Ich frage auch nicht die LastKnownLocation ab sondern mache ein Request und ein remove sobald die Request vollzogen wurde.

Code:
FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(mContext);
        LocationRequest mLocationRequest = new LocationRequest();
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        mLocationRequest.setInterval(UPDATE_INTERVAL);
        mLocationRequest.setFastestInterval(FASTEST_INTERVAL);


        mFusedLocationClient.requestLocationUpdates(mLocationRequest, new LocationCallback() {
                    @Override
                    public void onLocationResult(LocationResult locationResult) {
                     if(locatinResult != null){ 

                        mLocation = locationResult.getLastLocation();

                        String[] GPSData = ArrayHelper.getGPSArray();

                        Job currentJob = Job.getActiveJob(mContext);
                        Fahrzeug fahrzeug = Fahrzeug.getFahrzeug(mContext);

                        GPSData[0] = TimeHelper.getCurrentDateString();
                        GPSData[1] = TimeHelper.getCurrentTimeString();
                        GPSData[2] = currentJob.getId();
                        GPSData[3] = String.valueOf(getLatitude());
                        GPSData[4] = String.valueOf(getLongitude());
                        GPSData[5] = getLocationStreet();
                        GPSData[6] = getLocationStreetNumber();
                        GPSData[7] = getLocationPostalCode();
                        GPSData[8] = getLocationCity();
                        GPSData[9] = getLocationState();
                        GPSData[10] = getLocationCountry();
                        GPSData[11] = getLocationCountryCode();
                        GPSData[12] = User.getAlias();
                        GPSData[13] = fahrzeug.getAlias();
                        GPSData[14] = IMEI_Helper.getIMEI(mContext);

                        new HTTP_GPS_Upload(mContext, GPSData);
                   }
                        mFusedLocationClient.removeLocationUpdates(this);

                    }
                },null);
Eventuell liegt es aber auch am Upload selbst, das der Netzwerkzugriff villeicht stark eingeschränkt ist.

Habt ihr dafür noch ideen?
 
J

jogimuc

Erfahrenes Mitglied
Hallo kann schon sein das der Netzwerkzugriff im DeepSleep gedrosselt ist .

Somit ist aber auch der GoogleLocationService gedrosselt. Denn der braucht auch das Internet um dir aus der Gps Pos den Standort zu berechnen. Danach schickst du ihn erst selber an deinen Server.
Baue dir doch ein log in eine Datei, DB aus der du sehen kannst wer so lange braucht der LocationServce oder dein Upload.

Wie so holst du nicht nur die GPS Pos. sendest die an den Server, und der Server errechnet selber aus den Daten den Standort, Strasse, Hausnummer, Stadt usw.
Das sollte schneller gehen, als der Googleservice.

Was Passiert eigentlich wenn du der App verbietest in den Akkuspar mode zu gehen?
 
S

SlayNox

Ambitioniertes Mitglied
Threadstarter
Hay
also habe herrausbekommen das der AlarmManger der Übeltäter ist. Habe ihn einfach mal immer wieder das selbe in eine Datei schreiben lassen und siehe da, nach ca 4-5 minuten inaktivität geht das Gerät in den DeepSleep und der AlarmManager trriggert nur noch exakt alle 5 minuten.

Als Beispiel

Normale Nutzung
13:12 Uhr
13:13 Uhr
13:14 Uhr
13:15 Uhr
13:16 Uhr
DeepSleep Phase tritt ein
13:20 Uhr
13:25 Uhr
13:30 Uhr

Habe sie von der Energieüberwachung ausgenommen, verändert hat dies jedoch nichts.
Vielleich noch ideen was den AlarmManger angeht ?
 
D

deek

Stammgast
Da kann man inzwischen nicht mehr viel machen. Android ist da sehr viel restriktiver als früher geworden. Doze/Deep Sleep throttlet wie es will. Eventuell gibt es ein WakeLock, dass verhindert, dass das Handy in den Deep Sleep geht. Ist die Frage ob das a) hilft und b) wie die Akku Laufzeit dann ist. (Keep the device awake  |  Android Developers)
Du kannst auch noch JobScheduler statt AlarmManager probieren, ich weiß nicht ob der weniger reduziert wird.
 
S

SlayNox

Ambitioniertes Mitglied
Threadstarter
Ich glaube das sich das stark negativ auf den Akku auswirkt. Außerdem weiß ich nicht ob das gerät, wenn es sich mal im DeepSleep befindet sich mit dem WakeLock wecken lässt. Ich meine selbst wenn ich eine Routine habe die immer wieder einen WakeLock ausführt, kann es trotzdem passieren das das Gerät in den DeepSleep geht da man den WakeLock sehr ungern alle paar Sekunden ausführt.

Aber damit muss ich dann wohl leben. Insgesamt hat mir dieser Thread sehr geholfen und dafür bin ich dankbar.
 
Oben Unten