Come faccio a sapere se il GPS di un dispositivo Android è abilitato


Risposte:


456

Il modo migliore sembra essere il seguente:

 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
Principalmente si tratta di accendere l'intenzione di vedere la configurazione GPS, vedere github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/… per i dettagli.
Marcus,

3
Bel frammento di codice. Ho rimosso @SuppressWarnings e non ricevo alcun avviso ... forse non sono necessari?
durata

30
Consiglio di dichiarare alertper l'intera attività in modo da poterla eliminare in onDestroy per evitare una perdita di memoria ( if(alert != null) { alert.dismiss(); })
Cameron,

Quindi cosa succede se sto risparmiando batteria, funzionerà ancora?
Prakhar Mohan Srivastava,

3
@PrakharMohanSrivastava se le impostazioni della posizione sono in Risparmio energia, questo restituirà false, tuttavia LocationManager.NETWORK_PROVIDERrestituirà true
Tim

129

In Android, possiamo facilmente verificare se il GPS è abilitato nel dispositivo o meno utilizzando LocationManager.

Ecco un semplice programma da controllare.

GPS abilitato o meno: - Aggiungi la riga di autorizzazione utente di seguito in AndroidManifest.xml per accedere alla posizione

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

Il tuo file di classe java dovrebbe essere

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

L'output sarà simile

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


1
Non succede nulla quando provo la tua funzione. Non ho riscontrato errori quando lo collaudo però.
Airikr,

Ho funzionato! :) Molte grazie ma non posso votare fino a quando non avrai modificato la tua risposta: /
Airikr

3
nessun problema @Erik Edgren hai una soluzione così sono felice ENjoy ... !!

@ user647826: Eccellente! Funziona bene. Mi hai salvato la notte
Addi,

1
Un consiglio: dichiarare alertper l'intera attività in modo da poterlo ignorare onDestroy()per evitare una perdita di memoria ( if(alert != null) { alert.dismiss(); })
naXa

38

sì Le impostazioni GPS non possono più essere modificate in modo programmatico poiché sono impostazioni di privacy e dobbiamo verificare se sono attive o meno dal programma e gestirle se non sono accese. puoi avvisare l'utente che il GPS è spento e utilizzare qualcosa del genere per mostrare all'utente la schermata delle impostazioni, se lo desideri.

Controlla se i provider di posizione sono disponibili

    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
    }

Se l'utente desidera abilitare il GPS, è possibile mostrare la schermata delle impostazioni in questo modo.

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

E nel tuo onActivityResult puoi vedere se l'utente lo ha abilitato o meno

    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
            }
        }
    }

Questo è un modo per farlo e spero che aiuti. Fammi sapere se sto facendo qualcosa di sbagliato.


2
ciao, ho un problema simile ... puoi spiegare brevemente che cos'è il "REQUEST_CODE" ea cosa serve?
poeschlorn,

2
@poeschlorn Anna ha pubblicato il link di seguito dettagliato. In termini semplici, RequestCode ti consente di utilizzare startActivityForResultcon più intenti. Quando gli intenti tornano alla tua attività, controlla il RequestCode per vedere quale intento sta tornando e rispondere di conseguenza.
Farray,

2
La providerpuò essere una stringa vuota. Ho dovuto cambiare l'assegno in(provider != null && !provider.isEmpty())
Pawan

Poiché il provider può essere "", considerare l'utilizzo di int mode = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE); Se mode = 0 GPS è disattivato
Levon Petrosyan il

31

Ecco i passaggi:

Passaggio 1: creare servizi in esecuzione in background.

Passaggio 2: è richiesta la seguente autorizzazione anche nel file manifest:

android.permission.ACCESS_FINE_LOCATION

Passaggio 3: scrivere il codice:

 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();

Step 4: O semplicemente puoi controllare usando:

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

Passaggio 5: eseguire i servizi continuamente per monitorare la connessione.


5
Indica che il GPS è abilitato anche quando è spento.
Ivan V,

15

Sì, puoi controllare di seguito il codice:

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

9

Questo metodo utilizzerà il servizio LocationManager .

Link alla fonte

//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

Il GPS verrà utilizzato se l'utente gli ha consentito di utilizzarlo nelle sue impostazioni.

Non puoi più attivarlo esplicitamente, ma non è necessario: è davvero un'impostazione di privacy, quindi non vuoi modificarlo. Se l'utente è d'accordo con le app che ottengono coordinate precise, sarà attivo. Quindi l'API del gestore della posizione utilizzerà il GPS, se possibile.

Se la tua app non è davvero utile senza GPS ed è disattivata, puoi aprire l'app delle impostazioni nella schermata giusta usando un intento in modo che l'utente possa abilitarlo.


6

Questo pezzo di codice controlla lo stato del GPS

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

`


3

Nel tuo LocationListener, attrezzo onProviderEnablede onProviderDisabledgestori di eventi. Quando chiami requestLocationUpdates(...), se il GPS è disabilitato sul telefono, onProviderDisabledverrà chiamato; se l'utente abilita il GPS, onProviderEnabledverrà chiamato.


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()
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.