GPS Lokalisierung

R

RealNiclas

Neues Mitglied
Threadstarter
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
 
swa00

swa00

Moderator
Teammitglied
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:
R

RealNiclas

Neues Mitglied
Threadstarter
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);
    }
};
swa00 schrieb:
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 eine Zeit und rufst direkt ein Request auf.
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);
 
swa00

swa00

Moderator
Teammitglied
Ich gebe dem ganzen doch 5 Sekunden Zeit durch die Verzögerung oder liege ich da falsch?
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:
R

RealNiclas

Neues Mitglied
Threadstarter
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
Ahhh ok, ne wusste ich nicht.
Habe es nun mit FusedLocationProviderClient probiert und es funktioniert einwandfrei, auch auf den Handys.
Vielen Dank! :)
 
R

RealNiclas

Neues Mitglied
Threadstarter
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
 
Thread starter Similar threads Forum Replies Date
S Android App Entwicklung 19
D Android App Entwicklung 9
S Android App Entwicklung 24
Oben Unten