2013-01-18 16 views
7

Nie przeprowadziłem obszernych testów, ale istnieją dowody na to, że ta pozycja android.permission.ACCESS_MOCK_LOCATION w Manifeście aplikacji nie działa tak, jak by zakładano (tj. Jeśli istnieje - pozwala na pozorowanie dostawców lokalizacji, w przeciwnym razie nie). Tak fałszywe aplikacje GPS, takie jak https://play.google.com/store/apps/details?id=com.lexa.fakegps, działają z dowolną aplikacją, niezależnie od tego, czy ustawiono ACCESS_MOCK_LOCATION, czy nie. Wydaje się, że wystarczy, jeśli użytkownik zezwoli na fałszywe lokalizacje w ustawieniach urządzenia.Pozwolenie ACCESS_MOCK_LOCATION jest ignorowane?

Być może ACCESS_MOCK_LOCATION naprawdę oznacza, że ​​aplikacja może sama w sobie pozorować dostawcę lokalizacji? Jeśli tak, to należy go odczytać bardziej jak WRITE_MOCK_LOCATION, a nie dostęp (odczyt), jak sugerowałaby nazwa. Brzmi bardziej jak błąd niż funkcja. Jeśli to prawda, to nie ma sposobu, aby naprawdę upewnić się, że lokalizacja GPS jest prawdziwa, a nie fałszywa?

+0

Proszę sprawdzić moją odpowiedź. – PageNotFound

+0

Dziękuję, ale tak naprawdę nie odpowiadasz na moje pytanie.Obawiam się, że niektóre aplikacje innych firm mogą łatwo lokalizować GPS na urządzeniach nierootowanych, a moja aplikacja, która pobiera GPS, nie może być bezpieczna. Moja aplikacja to aplikacja bezpieczeństwa, która jest o wiele mniej użyteczna, jeśli dowolny użytkownik końcowy może podrobić dowolną lokalizację GPS. Czy jest jakiś sposób obejścia tego? – JaakL

Odpowiedz

1

Ponieważ nikt właściwie odpowiedział na to pytanie, będę stanowić odpowiedź:

Może ACCESS_MOCK_LOCATION naprawdę oznacza, że ​​aplikacja może być się fałszywym dostawcą lokalizacji?

Tak. Uprawnienie pozwala aplikacji "uzyskać dostęp do funkcji programisty" pozornej lokalizacji ". Pozwala to twórcy tworzyć fałszywe lokalizacje, które wydają się rzeczywiste, w celu opracowania/przetestowania aplikacji, które mają cechy oparte na lokalizacji, bez faktycznego fizycznego przenoszenia lub zmiany (na przykład twardego drutu fałszywego GPS) urządzenia.

Ponieważ Google nie wie, którą aplikację chcesz przetestować lub w jaki sposób chcesz dostarczyć fałszywe dane, zrobiło to. Jako funkcja programisty zmniejsza ekspozycję tej funkcji na ogólną populację.

+0

Dziękuję, wyraźna odpowiedź. To jest po prostu myląca nazwa pozwolenia. Czy znasz drugą część mojego pytania - w jaki sposób moja aplikacja może zapewnić, że używa ona zawsze prawdziwej, a nigdy fałszywej lokalizacji? – JaakL

2

Najpierw należy włączyć tryb programisty, który w Androidzie 4.2.1 odbywa się przechodząc do Settings ->About Tablet (blisko dna; prawdopodobnie o nazwie coś podobnego do telefonów) i dotknij Build number na dole, siedem razy. Odliczanie pojawi się po rozpoczęciu stukania, aby pokazać, ile więcej potrzeba, aby zostać programistą.

Hit przycisk Wstecz, aby powrócić do Settings, a teraz można znaleźć Developer options pozycję nad O menu, które były w - kliknij go i sprawdź Allow mock locations pod DEBUGGING. Twoje urządzenie powinno teraz odpowiednio respektować ACCESS_MOCK_LOCATION.

(Jeśli masz na to motywację, aby przekonać Ingressa do przekonania się, że jesteś w pobliżu portalu, masz pecha - każda aplikacja oczywiście jest w stanie wykryć, że to ustawienie zostało włączone i nakazuje Ci wyłączyć to, więc możesz w najlepszym razie użyć go do uzupełnienia zapasów XM :-)

+1

-1 ponieważ to nie jest odpowiedź, PageNotFound ma poprawną odpowiedź. –

3

W http://developer.android.com/reference/android/Manifest.permission.html, to znaczy Allows an application to create mock location providers for testing, więc myślę, że to, co uważasz za słuszne.

I rzeczywiście, com.lexa.fakegps może kpić z lokalizacji bez numeru ACCESS_MOCK_LOCATION, tylko jeśli ma uprawnienie administratora. Ponadto musi on przełączać się na fałszywą lokalizację, nawet jeśli ma uprawnienie administratora. Tak więc, myślę, że pozwolenie dotyczy typowych aplikacji, a nie aplikacji systemowych. Aplikacje systemowe mają więcej uprawnień do robienia rzeczy bez deklarowania uprawnień w AndroidManifest.xml.

1

wyłączyć sprawdzanie niestrzępiącą MockLocation dla danego zezwolenia, tj

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"> 
    <uses-permission 
     android:name="android.permission.ACCESS_MOCK_LOCATION" 
     tools:ignore="MockLocation" /> 
</manifest>