Wie finde ich heraus, ob das GPS eines Android-Geräts aktiviert ist?


Antworten:


456

Der beste Weg scheint der folgende zu sein:

 final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        buildAlertMessageNoGps();
    }

  private void buildAlertMessageNoGps() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
           .setCancelable(false)
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                   startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                    dialog.cancel();
               }
           });
    final AlertDialog alert = builder.create();
    alert.show();
}

1
Hauptsächlich geht es darum, die GPS-Konfiguration zu starten . Weitere Informationen finden Sie unter github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/… .
Marcus

3
Schöner Codeausschnitt. Ich habe die @ SuppressWarnings entfernt und erhalte keine Warnungen ... Vielleicht sind sie unnötig?
Span

30
Ich würde empfehlen, alertfür die gesamte Aktivität zu deklarieren, damit Sie sie in onDestroy schließen können, um einen Speicherverlust zu vermeiden ( if(alert != null) { alert.dismiss(); })
Cameron

Was ist, wenn ich auf Batteriesparen bin? Funktioniert das immer noch?
Prakhar Mohan Srivastava

3
@PrakharMohanSrivastava Wenn Ihre Standorteinstellungen auf Energiesparen sind, wird dies false zurückgeben, jedoch LocationManager.NETWORK_PROVIDERtrue zurückgeben
Tim

129

In Android können wir mit LocationManager leicht überprüfen, ob GPS im Gerät aktiviert ist oder nicht.

Hier ist ein einfaches Programm zu überprüfen.

GPS aktiviert oder nicht: - Fügen Sie die folgende Benutzerberechtigungszeile in AndroidManifest.xml zum Zugriff auf den Speicherort hinzu

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

Ihre Java-Klassendatei sollte sein

public class ExampleApp extends Activity {
    /** Called when the activity is first created. */
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
            Toast.makeText(this, "GPS is Enabled in your devide", Toast.LENGTH_SHORT).show();
        }else{
            showGPSDisabledAlertToUser();
        }
    }

    private void showGPSDisabledAlertToUser(){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage("GPS is disabled in your device. Would you like to enable it?")
        .setCancelable(false)
        .setPositiveButton("Goto Settings Page To Enable GPS",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                Intent callGPSSettingIntent = new Intent(
                        android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(callGPSSettingIntent);
            }
        });
        alertDialogBuilder.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                dialog.cancel();
            }
        });
        AlertDialog alert = alertDialogBuilder.create();
        alert.show();
    }
}

Die Ausgabe sieht so aus

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein


1
Nichts passiert, wenn ich Ihre Funktion versuche. Ich habe keine Fehler bekommen, als ich es getestet habe.
Erik

Ich habe es geschafft! :) Vielen Dank, aber ich kann nicht abstimmen, bis Sie Ihre Antwort bearbeitet haben: /
Erik

3
kein Problem @Erik Edgren du bekommst eine Lösung, also bin ich glücklich ENjoy ... !!

@ user647826: Ausgezeichnet! Funktioniert gut. Du hast meine Nacht gerettet
Addi

1
Ein Tipp: Deklarieren Sie alertfür die gesamte Aktivität, damit Sie sie schließen können, onDestroy()um einen Speicherverlust zu vermeiden ( if(alert != null) { alert.dismiss(); })
naXa

38

Ja, GPS-Einstellungen können nicht mehr programmgesteuert geändert werden, da es sich um Datenschutzeinstellungen handelt. Wir müssen überprüfen, ob sie im Programm aktiviert sind oder nicht, und sie verarbeiten, wenn sie nicht aktiviert sind. Sie können den Benutzer benachrichtigen, dass das GPS ausgeschaltet ist, und auf diese Weise dem Benutzer den Einstellungsbildschirm anzeigen, wenn Sie möchten.

Überprüfen Sie, ob Standortanbieter verfügbar sind

    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if(provider != null){
        Log.v(TAG, " Location providers: "+provider);
        //Start searching for location and update the location text when update available
        startFetchingLocation();
    }else{
        // Notify users and show settings if they want to enable GPS
    }

Wenn der Benutzer GPS aktivieren möchte, können Sie den Einstellungsbildschirm auf diese Weise anzeigen.

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);

In Ihrem onActivityResult können Sie sehen, ob der Benutzer es aktiviert hat oder nicht

    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode == REQUEST_CODE && resultCode == 0){
            String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
            if(provider != null){
                Log.v(TAG, " Location providers: "+provider);
                //Start searching for location and update the location text when update available. 
// Do whatever you want
                startFetchingLocation();
            }else{
                //Users did not switch on the GPS
            }
        }
    }

Das ist eine Möglichkeit und ich hoffe, es hilft. Lassen Sie mich wissen, wenn ich etwas falsch mache.


2
Hallo, ich habe ein ähnliches Problem ... kannst du kurz erklären, was der "REQUEST_CODE" ist und wofür er ist?
Poeschlorn

2
@poeschlorn Anna hat den unten angegebenen Link gepostet. In einfachen Worten, der RequestCode ermöglicht die Verwendung startActivityForResultmit mehreren Absichten. Wenn die Absichten zu Ihrer Aktivität zurückkehren, überprüfen Sie den RequestCode, um festzustellen, welche Absicht zurückgegeben wird, und reagieren entsprechend.
Farray

2
Das providerkann eine leere Zeichenfolge sein. Ich musste den Scheck ändern(provider != null && !provider.isEmpty())
Pawan

Da der Anbieter "" sein kann, sollten Sie int mode = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE) verwenden. Wenn Modus = 0 GPS ist aus
Levon Petrosyan

31

Hier sind die Schritte:

Schritt 1: Erstellen Sie Dienste, die im Hintergrund ausgeführt werden.

Schritt 2: Sie benötigen auch die folgende Berechtigung in der Manifest-Datei:

android.permission.ACCESS_FINE_LOCATION

Schritt 3: Code schreiben:

 final LocationManager manager = (LocationManager)context.getSystemService    (Context.LOCATION_SERVICE );

if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) )
  Toast.makeText(context, "GPS is disabled!", Toast.LENGTH_LONG).show(); 
else
  Toast.makeText(context, "GPS is enabled!", Toast.LENGTH_LONG).show();

Schritt 4: Oder Sie können einfach überprüfen mit:

LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);

Schritt 5: Führen Sie Ihre Dienste kontinuierlich aus, um die Verbindung zu überwachen.


5
Es zeigt an, dass GPS auch dann aktiviert ist, wenn es ausgeschaltet ist.
Ivan V

15

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

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

9

Diese Methode verwendet den LocationManager- Dienst.

Quelle Link -

//Check GPS Status true/false
public static boolean checkGPSStatus(Context context){
    LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );
    boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    return statusOfGPS;
};

6

GPS wird verwendet, wenn der Benutzer die Verwendung in seinen Einstellungen zugelassen hat.

Sie können dies nicht mehr explizit einschalten, müssen es aber nicht - es ist wirklich eine Datenschutzeinstellung, also möchten Sie es nicht optimieren. Wenn der Benutzer damit einverstanden ist, dass Apps präzise Koordinaten erhalten, wird sie aktiviert. Dann verwendet die Location Manager-API GPS, wenn dies möglich ist.

Wenn Ihre App ohne GPS wirklich nicht nützlich ist und ausgeschaltet ist, können Sie die Einstellungs-App auf dem rechten Bildschirm mit einer Absicht öffnen, damit der Benutzer sie aktivieren kann.


6

Dieser Code überprüft den GPS-Status

final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
    buildAlertMessageNoGps();
}

`


3

In Ihren LocationListenerImplementierungs- onProviderEnabledund onProviderDisabledEreignishandlern. Wenn Sie anrufen requestLocationUpdates(...)und GPS auf dem Telefon deaktiviert ist, onProviderDisabledwird angerufen. Wenn der Benutzer GPS aktiviert, onProviderEnabledwird aufgerufen.


2
In Kotlin: - How to check GPS is enable or not

 val manager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            checkGPSEnable()

        } 


 private fun checkGPSEnable() {
        val dialogBuilder = AlertDialog.Builder(this)
        dialogBuilder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
                .setCancelable(false)
                .setPositiveButton("Yes", DialogInterface.OnClickListener { dialog, id
                    ->
                    startActivity(Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS))
                })
                .setNegativeButton("No", DialogInterface.OnClickListener { dialog, id ->
                    dialog.cancel()
                })
        val alert = dialogBuilder.create()
        alert.show()
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.