Wert von GPS Lesen

  • Antworten:9
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 146

05.06.2019, 21:25:22 via Website

Hallo zusammen

Ich möchte die Daten vom GPS auslesen. Bei den meisten Daten geht es.
Das Projekt kann ich kompilieren aber wenn die Daten angezeigt werden, stürzt die app ab mit der Meldung

java.lang.NoSuchMethodError: No virtual method getVerticalAccuracyMeters()F in class Landroid/location/Location; or its super classes (declaration of 'android.location.Location' appears in /system/framework/framework.jar)

Was muss ich machen damit ich den Wert korrekt auslese?

Gruss Renato

Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 777

08.06.2019, 17:32:56 via Website

Hallo
"getVerticalAccuracyMeters" gibt es ja erst ab einer Api 26, darunter würd das Handy abstürzen.
https://developer.android.com/reference/android/location/Location.html#getVerticalAccuracyMeters()
Wie ich weiß arbeitetest nu noch mit alten Handys Android 5- 6, die Methode gibt es erst ab Android 8. Somit ist das kein wunder das dein Handy abstützt.
Es nützt dir auch nicht die Annotationen RequiresApi oder TargetApi zu verwenden denn damit sagst du nur dem Compiler das er den nachfolgenden Code auch mit einer niedrigeren minSDk übersetzen soll. Das hat aber nichts damit zu tun das dadurch der Code auch auf der niedrigeren minSDK läuft.
Dafür must du selber sorgen in dem du prüft auf welcher API du bist und den code bei niedriger api überspringst.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

} else {

}

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 146

06.06.2019, 17:38:24 via Website

Ciao Ludy

Danke für die Hilfe. Aber soweit bin ich bereits gekommen.
Ich denke, dass Problem liegt nicht beim Sourcecode. Den kann ich ohne Fehler kompilieren. Erst beim Aufruf der Methode "getVerticalAccuracyMeters" stürzt die App mit der oben stehenden Meldung ab. Ich denke, dass ich beim Aufruf was änder muss. Aber was genau weiss ich nicht.

private void initial(){
    position = (LocationManager) getSystemService(LOCATION_SERVICE);
    positionhorcher = new LocationListener() {
        @RequiresApi(api = Build.VERSION_CODES.O)
        @Override
        public void onLocationChanged(Location location) {
            Double b_breit = 0.0;
            Double b_lang = 0.0;
            Double b_hoch = 0.0;
            Float b_schnell = (float) 0;
            Float b_posgenau = (float) 0;
            Float b_lage = (float) 0;
            Long b_zeitpunkt = (long) 0;
            Float b_schnellgenau = (float) 0;
            Float b_lagegenau = (float) 0;
            Long b_fixzeit = (long) 0;
            Float b_hochgenau = (float) 0;

            b_breit = location.getLatitude();
            b_lang = location.getLongitude();
            b_hoch = location.getAltitude();
            b_schnell = location.getSpeed();
            b_posgenau = location.getAccuracy();
            b_lage = location.getBearing();
            b_zeitpunkt = location.getTime();

// b_schnellgenau = location.getSpeedAccuracyMetersPerSecond();
// b_lagegenau = location.getBearingAccuracyDegrees();
b_fixzeit = location.getElapsedRealtimeNanos();
// b_hochgenau = location.getVerticalAccuracyMeters();

            breit.setText(b_breit.toString());
            lang.setText(b_lang.toString());
            genau.setText(b_posgenau.toString());
            hoch.setText(b_hoch.toString());
            hochgenau.setText(b_hochgenau.toString());
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {

        }

        @Override
        public void onProviderEnabled(String provider) {

        }

        @Override
        public void onProviderDisabled(String provider) {

        }
    };

Vielleicht kann mir jemand anders weiter helfen.

Gruss Renato

Hilfreich?
Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 777

08.06.2019, 17:32:56 via Website

Hallo
"getVerticalAccuracyMeters" gibt es ja erst ab einer Api 26, darunter würd das Handy abstürzen.
https://developer.android.com/reference/android/location/Location.html#getVerticalAccuracyMeters()
Wie ich weiß arbeitetest nu noch mit alten Handys Android 5- 6, die Methode gibt es erst ab Android 8. Somit ist das kein wunder das dein Handy abstützt.
Es nützt dir auch nicht die Annotationen RequiresApi oder TargetApi zu verwenden denn damit sagst du nur dem Compiler das er den nachfolgenden Code auch mit einer niedrigeren minSDk übersetzen soll. Das hat aber nichts damit zu tun das dadurch der Code auch auf der niedrigeren minSDK läuft.
Dafür must du selber sorgen in dem du prüft auf welcher API du bist und den code bei niedriger api überspringst.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

} else {

}

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 146

08.06.2019, 20:11:44 via Website

Danke Jokel

Du hast Recht. Mein Handy hat Version 5.1 installiert.
Genau in diese Richtung habe ich gedacht. In diesem Fall muss ich wirklich eine Prüfung einbauen.

Gruss Renato

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 146

08.06.2019, 20:36:47 via Website

Es gibt auch den Test "location.hasVerticalAccuracy()". Doch der nützt je nach Version auch nicht!

Gruss Renato

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 777

08.06.2019, 20:53:34 via Website

Ja diese Methode wurde auch erst mit api 26 hinzugefügt.

Aber mal ehrlich wozu habe ich dir den Link zu der offiziellen Dokumenten begeben. Da kannst du nachschauen mit welcher API Version die Methode geaddet wurden.

Die Dokumentation sollte immer die erste Anlaufstelle sein.

Ich denke mal du hast dir den Link gar nicht angesehen.
Sonst wärest du selber zu dem Ergebnis gekommen ab welcher API Version die Methode eingeführt wurde.(thinking)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 146

08.06.2019, 21:17:36 via Website

Ciao Jokel

Habe ich schon angeschaut. Aber den Hinweis oben rechts übersehen.
Danke für deine Geduld.

Gruss Renato

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 777

08.06.2019, 23:05:03 via Website

Ja das würde es wenn er nicht die Annotationen hätte.

Mit der @RequiresApi kommt die glaube ich nicht.

Hilfreich?
Diskutiere mit!