2009-05-09 7 views

risposta

413

Il modo migliore sembra essere la 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 http://github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/activity/main/MainActivity .java per i dettagli. – Marcus

+3

Nice snippet of code. Ho rimosso @SuppressWarnings e non ricevo alcun avviso ... forse non sono necessari? – span

+24

Consiglierei di dichiarare 'alert' per l'intera attività in modo da poterlo eliminare in onDestroy per evitare una perdita di memoria (' if (alert! = Null) {alert.dismiss();} ') – Cameron

6

GPS verrà utilizzato se l'utente ha permesso di essere utilizzato nelle sue impostazioni.

Non è possibile attivare questa opzione in modo esplicito, ma non è necessario: è un'impostazione di privacy davvero, quindi non si desidera modificarla. Se l'utente è a posto con le app che ottengono coordinate precise, sarà acceso. Quindi l'API del gestore località utilizzerà il GPS, se possibile.

Se l'app in realtà non è utile senza GPS ed è disattivata, è possibile aprire l'app delle impostazioni sullo schermo di destra utilizzando un intento in modo che l'utente possa abilitarlo.

32

sì Le impostazioni GPS non possono essere modificate più programmaticamente in quanto sono impostazioni della privacy e dobbiamo verificare se sono accese o meno dal programma e gestirlo se non sono accese. puoi avvisare l'utente che il GPS è spento e usare qualcosa di simile per mostrare la schermata delle impostazioni all'utente se lo desideri.

Verificare se i fornitori di localizzazione 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 vuole attivare il GPS si può 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 si può vedere se l'utente ha attivato o no

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 aiuta. Fammi sapere se sto facendo qualcosa di sbagliato.

+2

ciao, ho un problema simile ... puoi spiegare brevemente, cos'è il "REQUEST_CODE" e a cosa serve? – poeschlorn

+2

@poeschlorn Anna ha pubblicato il link per la descrizione di seguito. In termini semplici, RequestCode consente di utilizzare 'startActivityForResult' con più intenti. Quando gli intenti ritornano alla tua attività, controlli il RequestCode per vedere quale intento sta tornando e rispondi di conseguenza. – Farray

+2

Il 'provider' può essere una stringa vuota. Ho dovuto cambiare il controllo a '(provider! = Null &&! Provider.isEmpty())' – Pawan

119

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

Ecco un semplice programma da verificare.

GPS abilitato o meno: - aggiungere la riga permesso dell'utente di seguito nella AndroidManifest.xml per accedere alla posizione

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

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

La volontà di uscita sembra

enter image description here

enter image description here

+1

Non succede niente quando provo la funzione. Non ho errori quando lo provo però. – Erik

+0

Ho funzionato! :) Mille grazie ma non posso votare fino a quando non hai modificato la tua risposta:/ – Erik

+3

nessun problema @Erik Edgren hai una soluzione quindi sono felice ENjoy ... !! –

28

Ecco i passaggi:

Fase 1: creare servizi in esecuzione in background.

Fase 2: si richiede autorizzazione seguente nel file manifesto troppo:

android.permission.ACCESS_FINE_LOCATION 

Fase 3: Codice scrittura:

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

Fase 4: O semplicemente è possibile controllare utilizzando:

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

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

+2

Questo è il primo modo per controllare lo stato del GPS per me. Molte grazie! – Patryk

+6

il passo 4, mi dà 'true' ogni volta, anche il * GPS * non è abilitato .... –

+5

Indica che il GPS è abilitato anche quando è spento. –

9

Sì, è possibile controllare qui sotto è il codice:

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

Come posso abilitarlo se è disabilitato –

2

Nella tua LocationListener, implementare e onProviderEnabledonProviderDisabled gestori di eventi. Quando chiami requestLocationUpdates(...), se il GPS è disabilitato sul telefono, verrà chiamato il numero onProviderDisabled; se l'utente abilita il GPS, verrà chiamato onProviderEnabled.

2

Questo pezzo di codice controlla lo stato del GPS

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

`

Problemi correlati