Jeśli mam już ACCESS_FINE_LOCATION, czy mogę pominąć ACCESS_COARSE_LOCATION?

89

Mam aplikację GPS, która już prosi o ACCESS_FINE_LOCATIONpozwolenie w manifeście, teraz chcę dodać bibliotekę (MoPub), która wymaga ACCESS_COARSE_LOCATION.

Czy mam rację zakładając, że ACCESS_FINE_LOCATIONto wystarczy i mogę pominąć ACCESS_COARSE_LOCATIONmój manifest?

charliefortune
źródło

Odpowiedzi:

153

https://developer.android.com/guide/topics/location/strategies.html#Permission

Uwaga: jeśli używasz zarówno NETWORK_PROVIDER, jak i GPS_PROVIDER, musisz poprosić tylko o uprawnienie ACCESS_FINE_LOCATION, ponieważ obejmuje ono pozwolenie dla obu dostawców. (Uprawnienie dla ACCESS_COARSE_LOCATION obejmuje uprawnienia tylko dla NETWORK_PROVIDER).

Krótko mówiąc: tak, nie potrzebujesz, ACCESS_COARSE_LOCATIONjeśli już zdefiniowałeś ACCESS_FINE_LOCATION.

Connor Tumbleson
źródło
13
+1, ale co dziwne, dokument Map Google zaleca używanie obu: developers.google.com/maps/documentation/android/ ...
alex
3
Może dla telefonów z funkcjami sieciowymi, ale bez GPS?
Nicklas A.
2
@NicklasA. logicznie rzecz biorąc, nie powinno to wpływać na fakt, że „dobrze” obejmuje „gruboziarnisty” - brakującego dostawcy po prostu będzie brakować. Ponadto, gdyby było to potrzebne w tym przypadku, spodziewałbym się, że tak powiedzą dokumenty Google.
ToolmakerSteve
9
Aktualizacja komentarza @ alex: Mapy Google wyraźnie mówią teraz, że wystarczy poprosić o jedno pozwolenie. developers.google.com/maps/documentation/android-api/location
Klox
15

Zależy od Twoich potrzeb.

Pozwolenie mądre, ACCESS_FINE_LOCATIONobejmuje ACCESS_COARSE_LOCATION. Jest jednak haczyk:

ACCESS_COARSE_LOCATIONpodaje ostatnią znaną lokalizację, która jest przyjazna dla baterii https://developer.android.com/training/location/retrieve-current.html#setup
Na przykład, jeśli aplikacja wykonuje coś w rodzaju rekomendacji opartych na lokalizacji, ostatnia znana lokalizacja to wystarczająco dobry.
Ma to zależność od usług Google Play

Jeśli jednak potrzebujesz czegoś takiego jak lokalizacja na żywo / w czasie rzeczywistym, taka jak Pokemon Go, użyj ACCESS_FINE_LOCATION
To daje ci lokalizację na żywo / w czasie rzeczywistym. Musisz użyć opcji LocationListener
Ostatnio sprawdzałem, nie wymaga to Usług Google Play

ericn
źródło
Czy to uprawnienie byłoby przydatne do skanowania Bluetooth LE?
IgorGanapolsky
@ericn może możesz mi pomóc z problemami z lokalizacją? stackoverflow.com/questions/63917764/… Mam bardzo dziwne zachowanie podczas słuchania zdań NMEA.
Viktor Apoyan