2013-10-14 10 views
10

ho il seguente codice e non è buona, perché a volte il GPS prende molto tempoCome posso controllare se il GPS è attivato prima che io cerco di usarlo

Come posso effettuare le seguenti operazioni:

  1. Controllare se il GPS è abilitato
  2. Utilizzare il GPS se è abilitato altrimenti utilizzare il provider di rete.
  3. Se il GPS impiega più di 30 secondi, utilizzare la rete.

posso fare questo con la mia logica con un tempo o Thread.sleep ma penso che ci potrebbe essere un modo più stabndard

// Acquire a reference to the system Location Manager 
      LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 

      // Define a listener that responds to location updates 
      LocationListener locationListener = new LocationListener() { 
       public void onLocationChanged(Location location) { 
        // Called when a new location is found by the network location provider. 
        locationCallback(location); 
       } 

       public void onStatusChanged(String provider, int status, Bundle extras) {} 

       public void onProviderEnabled(String provider) {} 

       public void onProviderDisabled(String provider) {} 
       }; 

      // Register the listener with the Location Manager to receive location updates 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
+0

Ripensate alla vostra terza condizione. alzalo a 60 secondi. 30s funziona spesso solo con AGPS usando internet. – AlexWien

risposta

8

Proprio con questo, è possibile verificare la disponibilità GPS

LocationManager mlocManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);; 
    boolean enabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
10

non c'è modo standard, quello che dovete fare da soli con l'aiuto di:

if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
     //Do what you need if enabled... 
    }else{ 
     //Do what you need if not enabled... 
    } 

E questa autorizzazione a manifestare:

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

Come raccomandazione se il GPS non è abilitato, di solito la norma specifica per il popup Impostazioni di localizzazione di attività in modo che l'utente può specificamente abilitarlo ...

Spero che questo aiuta.

Saluti!

+1

Inoltre, per effettuare la chiamata come mostrato in questa risposta, è necessario aggiungere quanto segue al proprio AndroidManifest.xml: '' – bsara

1

che si potrebbe utilizzare il codice nella mia risposta a: Location servise GPS Force closed

Ti dà un metodo di callback per il GPS primo fix e cambiamenti di posizione che può essere molto conveniente. Ciò facilita anche la modifica dell'implementazione di GPSTracker per passare alla rete se il GPS impiega troppo tempo per ottenere una prima correzione.

Problemi correlati