2013-05-31 14 views
24

Możesz określić, czy któryś z dostawców jest dostępny w Menedżerze lokalizacji, ale czy można to zrobić za pomocą apikacji lokalizacji usług Google Play?Usługa lokalizacyjna Android check włączona z usługami lokalizacji api

Gdy nic nie jest włączone, w rzeczywistości "dostęp do mojej lokalizacji" jest wyłączony, wszystkie wywołania API (connect(), requestLocationUpdates()) kończą się pomyślnie, ale nigdy nie otrzymasz onLocationChanged().

Wydaje się głupie, że należy używać zarówno menedżera LocationManager, jak i LocationClient.

myślę, co potrzebne jest jakiś sposób, aby wiedzieć, że onLocationChanged (0 będzie nigdy sprawdzony.

Odpowiedz

26

Mam czesane docs i również nie znaleźli żadnego sposobu korzystania LocationClient wykryć, czy lokalizacja Usługi są włączone. onConnected, onDisconnected i onConnectionFailed nie wydają się być powiązane z tym, czy usługi lokalizacyjne są włączone, czy nie,

Obecnie wykonuję żądania lokalizacji za pomocą LocationClient, ale przy użyciu starej metody locationManager.isProviderEnabled(String provider), aby wykryć, czy Lokalizacja Usługi są włączone. Jest to optymalne dla mnie, ponieważ nawet jeśli LocationClient zapewniał pewien sposób, to nie ma d Pomiędzy GPS a siecią i bardzo chciałbym móc poprosić użytkownika o włączenie GPS.

if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
    //GPS Provider disabled 
    return false; 
} 
+2

dziękuję - może ktoś z google zobaczy to i naprawi to – user1248322

+0

Ja też uważam to za dziwne! – Bear

+5

'if (lm.isProviderEnabled (LocationManager.GPS_PROVIDER) || lm.isProviderEnabled (LocationManager.NETWORK_PROVIDER)) {}' Myślę, że jest najbardziej kompletnym podejściem. – Diolor

12

Obecnie istnieje niezawodny sposób, aby wykryć, czy aktualizacje są dostępne od lokalizacji Google Play Services 7.3.0:

Wdrożenie i zarejestrować LocationCallback i zastąpić onLocationAvailability() lub zadzwoń LocationServices.FusedLocationApi.getLocationAvailability() aby odzyskać status dostępności. Jeśli jest to fałsz, wiadomo, że aktualizacje lokalizacji nie zostaną dostarczone, chyba że coś zmieni się w konfiguracji urządzenia.

Ta metoda jest dość sprytna: na przykład jest w stanie stwierdzić, że żadne aktualizacje lokalizacji nie będą dostarczane w urządzeniu WiFi, jeśli WiFi jest wyłączone lub urządzenie znajduje się w trybie samolotowym, nawet jeśli dostawca lokalizacji sieciowej jest zawsze włączony.

+0

Doc mówi: Zwraca dostępność danych o lokalizacji. Kiedy isLocationAvailable() zwraca true, to lokalizacja zwrócona przez getLastLocation (GoogleApiClient) będzie rozsądnie zaktualizowana w ramach wskazówek określonych przez aktywne żądania LocationRequest. Rozumiem, że pokazuję, czy aktualnie dostępne są dane o lokalizacji, a nie, czy usługi lokalizacyjne są włączone. – lujop

4

Usługi Google Play 7.0 introduced a Settins Api gdzie można poprosić o potrzebne ustawienia lokalizacji, a następnie zapytać, czy są włączone, lub poprosić użytkownika o ich włączenie.