2013-08-09 12 views
18

Ho un'app per Android che utilizza la posizione. Ma ho notato che se gli utenti disabilitano "Accesso alla mia posizione" in Impostazioni> Accesso alla posizione, nulla funziona più. Come posso verificare che sia abilitato? Nel caso in cui sia disabilitato, come posso aprire queste impostazioni dalla mia app?Verifica se 'Accesso alla mia posizione' è abilitato - Android

Grazie

risolto:

String locationProviders = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
if (locationProviders == null || locationProviders.equals("")) { 
    ... 
    startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 
} 

risposta

3

Può essere questo sarà utile controllare questo sito si discute circa il servizio di localizzazione

http://www.scotthelme.co.uk/android-location-services/

+0

Ok sembra essere Settings.Secure.getString (getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); grazie, qualche idea su come aprirlo dalla mia app? –

+1

link is dead ... –

8

È possibile controllare in quel modo :

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) // Return a boolean 

EDIT:

Se si desidera controllare il provider di rete:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) // Return a boolean 

EDIT 2:

Se si desidera aprire le impostazioni, è possibile utilizzare questo intento:

Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
+0

what If Voglio ottenere la posizione corrente grazie al Wifi? –

+0

È anche possibile verificare la disponibilità del fornitore di rete (sostituire 'LocationManager.GPS_PROVIDER' da' LocationManager.NETWORK_PROVIDER'). – Brtle

+1

Se si desidera utilizzare il Wi-Fi, utilizzare il provider di rete. Dai un'occhiata ai documenti e agli articoli ufficiali di Android, come ad esempio: http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html (e nota che ora ci sono anche cose nuove, via Google Play Services, come il provider fuso: https://developer.android.com/google/play-services/location.html. –

0

Sfortunatamente, sembra che l'utilizzo di Settings.Secure.LOCATION_PROVIDERS_ALLOWED è obsoleto poiché API 19.

Un nuovo modo per farlo sarebbe:

int locationMode = Settings.Secure.getInt(
    getContentResolver(), 
    Settings.Secure.LOCATION_MODE, 
    Settings.Secure.LOCATION_MODE_OFF // Default value if not found 
); 

if (locationMode == Settings.Secure.LOCATION_MODE_OFF) { 
    // Location is off 
} 
2

Un modo alternativo per farlo senza usare Settings.Secure e senza la scansione di tutti i fornitori spilli sarebbe fare:

LocationManager locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE); 
int providersCount = locationManager.getProviders(true).size(); // Listing enabled providers only 
if (providersCount == 0) { 
    // No location providers at all, location is off 
} 
-1

ci sono due modi per controllare la posizione, 1-utilizzando il GPS 2-provider di rete utilizzando il suo meglio per controllare sia il servizio sono abilitati o not.For che uso questo meto d :)

public boolean checkServices(){ 
    //check location service 
    LocationManager locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE); 
    if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && 
      locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ 
      return true; 
    } 
} 
+0

non so perché qualcuno mi dà -1 per questo ...questa soluzione funziona per me e sto usando it.if la soluzione non ha funzionato con voi prova un'altra soluzione non segnare come -1 idiota, –