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?

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.


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.