2013-01-18 7 views
7

Non ho eseguito test approfonditi, ma ci sono prove del fatto che android.permission.ACCESS_MOCK_LOCATION nel manifest dell'applicazione non funziona come si suppone (vale a dire se esiste, consente ai provider di localizzazione fittizi, altrimenti no). Quindi le applicazioni GPS falsi come https://play.google.com/store/apps/details?id=com.lexa.fakegps funzionano con qualsiasi applicazione, indipendentemente dal fatto che sia impostato o meno su ACCESS_MOCK_LOCATION. Sembra essere abbastanza se l'utente consente la presenza di posizioni false nelle impostazioni del dispositivo.L'autorizzazione ACCESS_MOCK_LOCATION è ignorata?

Forse ACCESS_MOCK_LOCATION significa davvero che l'applicazione può essere essa stessa il fornitore di localizzazione fittizio? Se è così, allora dovrebbe essere letto più come WRITE_MOCK_LOCATION, non accedere (leggi) come suggerisce il nome. Sembra più un bug che una funzionalità. Se questo è vero, allora non c'è modo di garantire veramente che la posizione GPS sia reale, non falsa?

+0

Si prega di controllare la mia risposta. – PageNotFound

+0

Grazie, ma non rispondi davvero alla mia domanda.La mia preoccupazione è che alcune app di terze parti possano falsificare facilmente la posizione GPS su dispositivi non rooted e la mia applicazione che consuma GPS non può essere al sicuro. La mia app è l'app di sicurezza, che è molto meno utile se qualche utente finale può simulare qualsiasi posizione GPS con questo. C'è un modo per aggirarlo? – JaakL

risposta

1

Dal momento che nessuno in realtà risposto alla tua domanda, mi fornirà una risposta:

Forse ACCESS_MOCK_LOCATION in realtà significa che l'applicazione può be fornitore di localizzazione fittizio?

Sì. L'autorizzazione consente all'app di "accedere" alla funzione di sviluppo "postazione fittizia". Ciò consente a uno sviluppatore di creare posizioni fittizie che sembrano reali per sviluppare/testare applicazioni che dispongono di funzionalità basate sulla posizione senza dover effettivamente spostare o alterare fisicamente (ad esempio il cavo rigido un GPS falso) il dispositivo.

Perché Google non sa quale applicazione si desidera testare o come si desidera fornire dati falsi, lo ha fatto. In qualità di sviluppatore, riduce l'esposizione di questa funzionalità alla popolazione generale.

+0

Grazie, risposta chiara. Quindi questo è solo il nome del permesso di confusione. Conoscete l'altra parte della mia domanda: in che modo la mia app può garantire che si utilizzi sempre in modo reale e mai in qualche luogo fittizio? – JaakL

2

Innanzitutto è necessario attivare la modalità sviluppatore, che a Android 4.2.1 è fatto andando a Settings ->About Tablet (vicino alla parte inferiore; probabilmente chiamato qualcosa di simile per i telefoni) e toccare Build number in fondo, sette volte. Un conto alla rovescia apparirà una volta che inizi a tappare, per mostrarti quanto c'è di più necessario per diventare uno sviluppatore.

premere il pulsante indietro per tornare al Settings, e ora si troverà un elemento Developer options sopra il menu Chi eri in - clic su di esso, e controllare Allow mock locations sotto DEBUGGING. Il tuo dispositivo ora deve rispettare correttamente lo ACCESS_MOCK_LOCATION.

(Se la tua motivazione per fare questo è ingannare Ingress facendoti credere che sei in giro per un portale, sei sfortunato, però - qualsiasi app è ovviamente in grado di rilevare che questa impostazione è stata attivata e ti dice di disabilitare così, puoi utilizzarlo al meglio per ricaricare la tua fornitura XM :-)

+1

-1 poiché questa non è una risposta, PageNotFound ha una risposta valida. –

3

In http://developer.android.com/reference/android/Manifest.permission.html, si dice Allows an application to create mock location providers for testing, quindi penso che quello che pensi sia giusto.

E infatti, com.lexa.fakegps può prendere in giro la posizione senza ACCESS_MOCK_LOCATION solo se dispone di privilegi di root. Inoltre, è necessario attivare Allow mock locations per simulare la posizione anche se ha il privilegio di root. Quindi, penso che l'autorizzazione sia per le app comuni non per le app di sistema. Le app di sistema hanno più privilegi per fare le cose senza dichiarare le autorizzazioni in AndroidManifest.xml.

1

Disabilitare il controllo di pelucchi MockLocation per quel particolare permesso, cioè

<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>