Wie überprüfe ich, ob Ortungsdienste aktiviert sind?

Lesezeit: 8 Minuten

Wie uberprufe ich ob Ortungsdienste aktiviert sind
Meroelyth

Ich entwickle eine App auf Android OS. Ich weiß nicht, wie ich überprüfen kann, ob die Ortungsdienste aktiviert sind oder nicht.

Ich brauche eine Methode, die “true” zurückgibt, wenn sie aktiviert sind, und “false”, wenn nicht (also kann ich im letzten Fall einen Dialog anzeigen, um sie zu aktivieren).

Wie uberprufe ich ob Ortungsdienste aktiviert sind
Shankar Agarwal

Sie können den folgenden Code verwenden, um zu überprüfen, ob der GPS-Anbieter und die Netzwerkanbieter aktiviert sind oder nicht.

LocationManager lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
boolean gps_enabled = false;
boolean network_enabled = false;

try {
    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch(Exception ex) {}

try {
    network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception ex) {}

if(!gps_enabled && !network_enabled) {
    // notify user
    new AlertDialog.Builder(context)
        .setMessage(R.string.gps_network_not_enabled)
        .setPositiveButton(R.string.open_location_settings, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
            }
        })
        .setNegativeButton(R.string.Cancel,null)
        .show();    
}

Und in der Manifestdatei müssen Sie die folgenden Berechtigungen hinzufügen

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

  • Vielen Dank für den Code. Suche nach Standortmanager: lm.getAllProviders().contains(LocationManager.GPS_PROVIDER) (oder NETWORK_PROVIDER) würde sicherstellen, dass Sie den Benutzer nicht auf eine Einstellungsseite werfen, auf der es keine Netzwerkoption gibt.

    – Peter

    16. November 2013 um 16:32 Uhr


  • Ebenfalls: Settings.ACTION_SECURITY_SETTINGS sollte sein Settings.ACTION_LOCATION_SOURCE_SETTINGS

    – Peter

    16. November 2013 um 17:12 Uhr


  • Sie könnten überprüfen, ob sich das Telefon im Flugzeugmodus befindet, und damit umgehen …. stackoverflow.com/questions/4319212/…

    – John

    15. April 2015 um 19:29 Uhr

  • Ich hatte einige Probleme mit lm.isProviderEnabled(LocationManager.GPS_PROVIDER), das früher immer falsch zurückgab. Dies scheint aufzutreten, wenn Sie die neue Version von Play Services verwenden: die, die einen Dialog anzeigt, in dem Sie Ihr GPS direkt aus dem Dialog heraus einschalten können, ohne die Aktivität der Einstellungen anzuzeigen. Wenn der Benutzer GPS aus diesem Dialog ausschaltet, gibt diese Anweisung immer falsch zurück, auch wenn GPS eingeschaltet ist

    – Marcelo Noguti

    18. September 2015 um 14:21 Uhr

  • Außerdem sollten keine leeren, verwirrenden, nutzlosen Try-Catch-Blöcke gesetzt werden

    – Chisko

    18. August 2016 um 5:30 Uhr

1646256193 563 Wie uberprufe ich ob Ortungsdienste aktiviert sind
Slava-Tanne

Ich verwende diesen Code zur Überprüfung:

public static boolean isLocationEnabled(Context context) {
    int locationMode = 0;
    String locationProviders;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
        try {
            locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);

        } catch (SettingNotFoundException e) {
            e.printStackTrace();
            return false;
        }

        return locationMode != Settings.Secure.LOCATION_MODE_OFF;

    }else{
        locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        return !TextUtils.isEmpty(locationProviders);
    }


} 

  • Aus Gründen der Übersichtlichkeit sollten Sie im catch-Block möglicherweise false zurückgeben. Andernfalls initialisieren Sie locationMode auf Settings.Secure.LOCATION_MODE_OFF.

    – RyanLeonard

    27. Oktober 2014 um 23:44 Uhr

  • Dies ist eine gute Antwort, da sie sowohl mit den alten als auch mit den neuen Android-Standort-APIs funktioniert.

    – Diederich

    10. Juni 2015 um 10:25 Uhr


  • LOCATION_PROVIDERS_ALLOWED – Verknüpfung Diese Konstante war in API-Level 19 veraltet. Wir müssen LOCATION_MODE und MODE_CHANGED_ACTION (oder PROVIDERS_CHANGED_ACTION) verwenden.

    – Choletski

    3. August 2015 um 12:49 Uhr

  • Diese Antwort hätte als die richtige Antwort akzeptiert werden müssen. Die Methode locationManager.isProviderEnabled() ist auf meinem 4.4-Gerät nicht zuverlässig (und wie ich gesehen habe, hatten andere Entwickler das gleiche Problem auch auf anderen Betriebssystemversionen). In meinem Fall gibt es in jedem Fall true für GPS zurück (es spielt keine Rolle, ob Ortungsdienste aktiviert sind oder nicht). Danke für diese tolle Lösung!

    – Starker Mayer

    11. August 2015 um 22:49 Uhr

  • Dies funktionierte nicht auf meinem Testgerät, Samsung SHV-E160K, Android 4.1.2, API 16. Obwohl ich das GPS offline mache, gibt diese Funktion immer noch true zurück. Ich habe auf Android Nougat getestet, API 7.1 funktioniert

    – HendraWD

    23. November 2016 um 9:11 Uhr

1646256193 826 Wie uberprufe ich ob Ortungsdienste aktiviert sind
Mayank Sharma

Wie jetzt im Jahr 2020

Der neueste, beste und kürzeste Weg ist

@SuppressWarnings("deprecation")
public static Boolean isLocationEnabled(Context context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        // This is a new method provided in API 28
        LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        return lm.isLocationEnabled();
    } else {
        // This was deprecated in API 28
        int mode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
                Settings.Secure.LOCATION_MODE_OFF);
        return (mode != Settings.Secure.LOCATION_MODE_OFF);
    }
}

  • Exzellent ! Aber noch besser, das Casting loswerden und direkt bestehen LocationManager.class in getSystemService Methode, weil der Aufruf API 23 erfordert 😉

    – Mackovich

    6. Juni 2019 um 8:52 Uhr


  • Oder Sie könnten verwenden LocationManagerCompat stattdessen. 🙂

    – Mokkun

    8. Oktober 2019 um 6:49 Uhr

  • Verwenden Sie return lm != null && lm.isLocationEnabled(); statt return lm.isLocationEnabled();

    – Dr.DS

    10. April 2020 um 19:45 Uhr

  • Danke! Settings.Secure.* erfordern API 19.

    – CoolMind

    20. Januar 2021 um 12:10 Uhr

  • Dieser Code funktioniert für meinen Anwendungsfall, aber ich kann keine Änderungen hören. Wenn der Modus „Nur Gerät“ ist und der Benutzer die Ortungsdienste deaktiviert. Empfänger wird nicht für MODE_CHANGED_ACTION ausgelöst. Aber für alle anderen Moduswechsel wird es ausgelöst.

    – soan saini

    12. Mai 2021 um 5:06 Uhr


1646256194 522 Wie uberprufe ich ob Ortungsdienste aktiviert sind
Sonnig

Auf AndroidX migrieren und verwenden

implementation 'androidx.appcompat:appcompat:1.3.0'

und verwenden Sie LocationManagerCompat

Auf Java

private boolean isLocationEnabled(Context context) {
    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    return LocationManagerCompat.isLocationEnabled(locationManager);
}

In Kotlin

private fun isLocationEnabled(context: Context): Boolean {
    val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    return LocationManagerCompat.isLocationEnabled(locationManager)
}

1646256195 637 Wie uberprufe ich ob Ortungsdienste aktiviert sind
Lenik

Sie können diesen Code verwenden, um Benutzer zu den Einstellungen zu leiten, wo sie GPS aktivieren können:

    locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    if( !locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ) {
        new AlertDialog.Builder(context)
            .setTitle(R.string.gps_not_found_title)  // GPS not found
            .setMessage(R.string.gps_not_found_message) // Want to enable?
            .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int i) {
                    owner.startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                }
            })
            .setNegativeButton(R.string.no, null)
            .show();
    }

  • Vielen Dank, aber ich brauche den Code nicht, um GPS zu überprüfen, sondern nur Ortungsdienste.

    – Meroelyth

    25. April 2012 um 8:19 Uhr

  • Ortungsdienste sind immer verfügbar, aber die verschiedenen Anbieter sind möglicherweise nicht verfügbar.

    – Lenik

    25. April 2012 um 8:22 Uhr

  • @lenik, einige Geräte bieten eine Einstellung (unter “Einstellungen > Persönlich > Ortungsdienste > Zugriff auf meinen Standort”), die die Standorterkennung insgesamt zu aktivieren / deaktivieren scheint, auch wenn bestimmte Anbieter aktiviert sind. Ich habe das aus erster Hand mit einem Telefon gesehen, mit dem ich getestet habe, und obwohl sowohl WLAN als auch GPS aktiviert waren, schienen sie tot zu sein … für meine App. Leider habe ich die Einstellung seitdem aktiviert und kann das ursprüngliche Szenario nicht mehr reproduzieren, selbst wenn ich die Einstellung „Zugriff auf meinen Standort“ deaktiviert habe. Ich kann also nicht sagen, ob sich diese Einstellung auf die auswirkt isProviderEnabled() und getProviders(true) Methoden.

    – Der Awnry-Bär

    13. März 2014 um 9:06 Uhr

  • … Ich wollte das nur rauswerfen, falls jemand anderes auf das gleiche Problem stößt. Ich hatte die Einstellung noch nie zuvor auf anderen Geräten gesehen, mit denen ich getestet habe. Es scheint eine Art systemweiter Standorterkennungs-Kill-Switch zu sein. Falls jemand Erfahrung damit hat, wie das isProviderEnabled() und getProviders(true) Methoden reagieren, wenn eine solche Einstellung aktiviert ist (oder deaktiviert ist, je nachdem, wie Sie es betrachten), wäre ich sehr neugierig zu wissen, was Sie erlebt haben.

    – Der Awnry-Bär

    13. März 2014 um 9:10 Uhr

1646256196 365 Wie uberprufe ich ob Ortungsdienste aktiviert sind
ZaBlanc

Ausgehend von der obigen Antwort müssen Sie in API 23 “gefährliche” Berechtigungsprüfungen hinzufügen und das System selbst überprüfen:

public static boolean isLocationServicesAvailable(Context context) {
    int locationMode = 0;
    String locationProviders;
    boolean isAvailable = false;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
        try {
            locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }

        isAvailable = (locationMode != Settings.Secure.LOCATION_MODE_OFF);
    } else {
        locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        isAvailable = !TextUtils.isEmpty(locationProviders);
    }

    boolean coarsePermissionCheck = (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED);
    boolean finePermissionCheck = (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED);

    return isAvailable && (coarsePermissionCheck || finePermissionCheck);
}

  • Vielen Dank, aber ich brauche den Code nicht, um GPS zu überprüfen, sondern nur Ortungsdienste.

    – Meroelyth

    25. April 2012 um 8:19 Uhr

  • Ortungsdienste sind immer verfügbar, aber die verschiedenen Anbieter sind möglicherweise nicht verfügbar.

    – Lenik

    25. April 2012 um 8:22 Uhr

  • @lenik, einige Geräte bieten eine Einstellung (unter “Einstellungen > Persönlich > Ortungsdienste > Zugriff auf meinen Standort”), die die Standorterkennung insgesamt zu aktivieren / deaktivieren scheint, auch wenn bestimmte Anbieter aktiviert sind. Ich habe das aus erster Hand mit einem Telefon gesehen, mit dem ich getestet habe, und obwohl sowohl WLAN als auch GPS aktiviert waren, schienen sie tot zu sein … für meine App. Leider habe ich die Einstellung seitdem aktiviert und kann das ursprüngliche Szenario nicht mehr reproduzieren, selbst wenn ich die Einstellung „Zugriff auf meinen Standort“ deaktiviert habe. Ich kann also nicht sagen, ob sich diese Einstellung auf die auswirkt isProviderEnabled() und getProviders(true) Methoden.

    – Der Awnry-Bär

    13. März 2014 um 9:06 Uhr

  • … Ich wollte das nur rauswerfen, falls jemand anderes auf das gleiche Problem stößt. Ich hatte die Einstellung noch nie zuvor auf anderen Geräten gesehen, mit denen ich getestet habe. Es scheint eine Art systemweiter Standorterkennungs-Kill-Switch zu sein. Falls jemand Erfahrung damit hat, wie das isProviderEnabled() und getProviders(true) Methoden reagieren, wenn eine solche Einstellung aktiviert ist (oder deaktiviert ist, je nachdem, wie Sie es betrachten), wäre ich sehr neugierig zu wissen, was Sie erlebt haben.

    – Der Awnry-Bär

    13. März 2014 um 9:10 Uhr

1646256196 506 Wie uberprufe ich ob Ortungsdienste aktiviert sind
GoRoS

Ja, Sie können unten den Code überprüfen:

public boolean isGPSEnabled(Context mContext) 
{
    LocationManager lm = (LocationManager)
    mContext.getSystemService(Context.LOCATION_SERVICE);
    return lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
}

mit der Erlaubnis in der Manifestdatei:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

916260cookie-checkWie überprüfe ich, ob Ortungsdienste aktiviert sind?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy