1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. RealNiclas, 19.11.2018 #1
    RealNiclas

    RealNiclas Threadstarter Neuer Benutzer

    Guten Tag,
    ich versuche nun schon seit einiger Zeit, via LocationManager und LocationListener, den Standort (Latitude und Longtitude) des Gerätes zu bekommen. Das ganze funktioniert auf einwandfrei wenn es mit dem Android Emulator gestartet wird. Wenn ich es jedoch auf einem Handy probiere zu starten, wird immer folgende Methode aufgerufen:

    Code:
    @Override
    public void onProviderDisabled(String provider) {
         Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
         startActivity(intent);
    }
    
    Ich werde immer zu den Einstellungen für den Standort geleitet, obwohl die Standortfunktion/GPS aktiviert ist.

    Mein Code:

    Code:
    public class MainActivity extends AppCompatActivity {
        private RecyclerView recyclerView;
        private RecyclerView.Adapter adapter;
        private RecyclerView.LayoutManager layoutManager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
            LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
            LocationListener locationListener = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    Toast.makeText(getApplicationContext(),location.toString(),Toast.LENGTH_LONG).show();
                }
    
                @Override
                public void onStatusChanged(String provider, int status, Bundle extras) {
    
                }
    
                @Override
                public void onProviderEnabled(String provider) {
    
                }
    
                @Override
                public void onProviderDisabled(String provider) {
                    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivity(intent);
                }
            };
            if(Build.VERSION.SDK_INT >= 23){
                if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    requestPermissions(new String[] {Manifest.permission.ACCESS_FINE_LOCATION},0);
                }
                else {
                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, locationListener);
                }
            }
            else {
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, locationListener);
            }
       }
    }
    
    Hat jemand eine Ideen, wie man dieses Problem beheben kann bzw. wo der Fehler liegen könnte?
    Vielen Dank im Voraus!
    LG: Niclas
     
  2. swa00, 19.11.2018 #2
    swa00

    swa00 Moderator Team-Mitglied

    Hallo

    schau Dir mal dir die API an .
    LocationListener | Android Developers

    Dort steht :
    Called when the provider is disabled by the user. If requestLocationUpdates is called on an already disabled provider, this method is called immediately.

    In deinem Code gibst du der ganzen Sache allerdings keine Zeit und rufst direkt ein Request auf.
     
    Zuletzt bearbeitet: 19.11.2018
  3. RealNiclas, 19.11.2018 #3
    RealNiclas

    RealNiclas Threadstarter Neuer Benutzer

    Ich habe in den Einstellungen meines Handy nun mal die Suchmethode auf Hohe Genauigkeit gestellt und werden seit dem nicht mehr zur Aktivierung weitergeleitet und mir wird auch zurückgegeben das der GPS-Provider aktiv ist.

    Code:
    boolean on = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    Toast.makeText(getApplicationContext(),Boolean.toString(on),Toast.LENGTH_LONG).show();
    
    Aber es wird keine dieser Methoden aufgerufen:

    Code:
    LocationListener locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            Toast.makeText(getApplicationContext(),location.toString(),Toast.LENGTH_LONG).show();
        }
    
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
    
        }
    
        @Override
        public void onProviderEnabled(String provider) {
            Toast.makeText(getApplicationContext(),"success",Toast.LENGTH_LONG).show();
        }
    
        @Override
        public void onProviderDisabled(String provider) {
            Toast.makeText(getApplicationContext(),"no success",Toast.LENGTH_LONG).show();
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(intent);
        }
    };
    
    Ich gebe dem ganzen doch 5 Sekunden Zeit durch die Verzögerung oder liege ich da falsch?

    Code:
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000 /*Verzögerung*/, 0, locationListener);
    
     
  4. swa00, 19.11.2018 #4
    swa00

    swa00 Moderator Team-Mitglied

    Du liegst falsch , denn du rufts umittelbar im OnCreate schon dein Request auf und checkst gar nicht, ob der Sensor wirklich eingeschaltet ist.
    Die 5 Sekunden beziehen sich auf den UpdateInterval, nicht auf den den Request ansich.
    Lies dazu bitte noch mal die API-Doku

    Stelle erst sicher fest, dass alles enabled ist.
    Zumal dein Intent ohne jede Prüfung deinerseits ausgeführt ist .

    P.S du weisst schon , dass du dafür eine veraltete Methode verwendest ?
    Change location settings  |  Android Developers
     
    Zuletzt bearbeitet: 19.11.2018
  5. RealNiclas, 19.11.2018 #5
    RealNiclas

    RealNiclas Threadstarter Neuer Benutzer

    Ahhh ok, ne wusste ich nicht.
    Habe es nun mit FusedLocationProviderClient probiert und es funktioniert einwandfrei, auch auf den Handys.
    Vielen Dank! :)
     
  6. RealNiclas, 30.11.2018 #6
    RealNiclas

    RealNiclas Threadstarter Neuer Benutzer

    Ich hätte da doch nochmal eine Frage. Und zwar: Gibt es eine Möglichkeit einzustellen, dass nur GPS genutzt wird (keine Internetverbindung vorhanden sein muss bzw. in Android GPS Methoden auf hohe Genauigkeit stellen muss).

    LG: Niclas
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Zuverlässige GPS abfragen Android App Entwicklung Donnerstag um 10:42 Uhr
Du betrachtest das Thema "GPS Lokalisierung" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.