2013-08-09 10 views
18

Mam aplikację na Androida, która korzysta z lokalizacji. Zauważyłem jednak, że jeśli użytkownicy wyłączyli "Dostęp do mojej lokalizacji" w Ustawieniach> Dostęp do lokalizacji, nic już nie działa. Jak mogę sprawdzić, czy jest włączona? Jeśli jest wyłączona, jak otworzyć te ustawienia w mojej aplikacji?Sprawdź, czy włączony jest "Dostęp do mojej lokalizacji" - Android

Dzięki

rozwiązany:

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

Odpowiedz

3

może być to będzie przydatna Kontrola ta strona omawia o usługę lokalizacyjną

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

+0

Ok wydaje się Settings.Secure.getString (getContentResolver() Settings.Secure.LOCATION_PROVIDERS_ALLOWED); thansk, jakiś pomysł, jak otworzyć to z mojej aplikacji? –

+1

link jest martwy ... –

8

Można sprawdzić to w ten sposób :

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

EDIT:

Jeśli chcesz sprawdzić operatorem:

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

EDIT 2:

Jeśli chcesz otworzyć ustawienia, można użyć tej intencji:

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

co, jeśli chcę uzyskać bieżącą lokalizację dzięki Wifi? –

+0

Możesz także sprawdzić dostępność operatora sieci (zastąp "LocationManager.GPS_PROVIDER" przez 'LocationManager.NETWORK_PROVIDER'). – Brtle

+1

Jeśli chcesz, aby Wifi korzystało z usługodawcy NETWORK. Zapoznaj się z dokumentami i oficjalnymi artykułami na Androida, takimi jak: http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html (i pamiętaj, że teraz jest jeszcze coś nowego, za pośrednictwem Google'a Usługi odtwarzania, takie jak usługodawca fused: https://developer.android.com/google/play-services/location.html. –

0

Niestety, wydaje się, że korzystanie z Settings.Secure.LOCATION_PROVIDERS_ALLOWED jest przestarzała, ponieważ API 19.

Nowy sposób to zrobić byłoby:

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

Alternatywnym sposobem aby to zrobić bez użycia Settings.Secure i bez skanowania wszystkich dostawców lokalizacji byłoby zrobić:

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

Istnieją dwa sposoby, aby sprawdzić lokalizację, 1 wykorzystujących GPS 2 wykorzystujących operatorem że lepiej sprawdzić zarówno usługi są włączone lub not.For które używają tej 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

Nie wiem, dlaczego ktoś daje mi -1 za to ...to rozwiązanie działa dla mnie i ja go używam.jeśli rozwiązanie nie działało z tobą, spróbuj innego rozwiązania, nie oznaczaj jako -1 idiota, –

Powiązane problemy