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

206

Wie überprüfe und aktiviere ich auf einem Android Cupcake (1.5) -fähigen Gerät das GPS?

Marcus
quelle
2
Was ist mit der Antwort zu akzeptieren? :)
Dieter

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();
}
Marcus
quelle
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

Beryllium
quelle
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.

erreichen
quelle
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.

Rakesh
quelle
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);
}
Arun Kumar
quelle
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;
};
Code Spy
quelle
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.


quelle
6

Dieser Code überprüft den GPS-Status

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

`

kashifahmad
quelle
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.

Ahmad Pourbafrani
quelle
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()
    }
Safal Bhatia
quelle