2010-08-03 9 views

risposta

0

Leggi un tutorial su Android location provider mock

+0

Non intendo fornire mock-location-data per la propria applicazione ma per avere un LocationProvider aggiuntivo per tutte le altre applicazioni del telefono tra cui scegliere. –

+0

Quindi il tutorial sul "fornitore di localizzazione Android simulato" non è utile. –

1

Non può essere eseguito.

Il problema è che solo agli OEM è consentito installare un nuovo fornitore di posizione. Uno sviluppatore di terze parti non può concedere alla sua applicazione l'autorizzazione richiesta per installare un nuovo fornitore di posizione (android.permission.INSTALL_LOCATION_PROVIDER).

vedere la risposta di Dianne Hackborn (ingegnere quadro Android) in questa discussione:

https://groups.google.com/d/topic/android-developers/OvCcdvO6jZY/discussion

Per installare un nuovo fornitore di posizione, si dovrebbe sviluppare un nuovo firmware (come http://www.cyanogenmod.com/), inserire il nuovo fornitore di localizzazione in questo firmware e installare tutte queste cose sul telefono dell'utente.

Vai a questa SO filo, così: Why are these permissions being refused?

Tutto questo a causa di problemi di sicurezza.

+0

È possibile su un dispositivo rooted? – JohnyTex

+1

@JohnyTex sì è possibile su dispositivo rooted (o rom personalizzata). Vedere le istruzioni su https://github.com/microg/android_packages_apps_UnifiedNlp –

6

Per scopi di sviluppo e test è possibile implementare un fornitore di posizioni fittizie. È necessario abilitare "Consenti posizioni simulate" nelle opzioni sviluppatore affinché le applicazioni possano vedere le posizioni da quel fornitore.

Per un esempio di codice, guarda GPX riproduzione:
https://github.com/johncarpenter/Android-GPX-Mock-Location-Provider

Il codice per la registrazione del provider di localizzazione inizia in linea 203 del file di android/src/com/twolinessoftware/android/PlaybackService.java.

Se si vuole un "vero" del fornitore (ad esempio, per distribuire la funzionalità come parte di un'applicazione per l'utente finale), alcune fonti dicono che non si può fare a meno che tale fornitore è in un pacchetto firmato con la chiave di sistema, in modo da dovresti creare la tua ROM dalla sorgente, firmarla con la tua chiave, firmare il tuo fornitore di localizzazione con la stessa chiave e installarla sul tuo telefono.

Tuttavia, ad un certo punto Android ha introdotto provider di indirizzi "separati". Apparentemente ne avevano bisogno per spostare il proprio NetworkLocationProvider dal core Android nel pacchetto di Google Apps.

Non ho ancora visto un provider di località disaggregato che funziona nella pratica e non sono a conoscenza di alcun codice open source che lo utilizza, ma sembra che la versione recente di Android supporti i provider di posizione "aftermarket".

Il codice sorgente per la rispettiva biblioteca è a
https://github.com/CyanogenMod/android_frameworks_base/tree/cm-10.1/location/lib

un provider di localizzazione avrebbe dovuto estendersi com.android.location.provider.LocationProviderBase.

Classi e metodi sono documentati nel codice.

Edit: Guardando
https://github.com/android/platform_frameworks_base/blob/master/core/res/AndroidManifest.xml
partire dalla riga 607, sembra che il livello di protezione per il permesso INSTALL_LOCATION_PROVIDER è signatureOrSystem. Ciò significa che qualsiasi app che utilizza questa funzione (cioè installa un fornitore di posizione, non necessariamente il fornitore di loca stesso) dovrebbe essere firmata con la stessa chiave della piattaforma (che richiederebbe di costruire l'intero sistema Android dalla sorgente) o essere installato come applicazione di sistema (che potrebbe funzionare su dispositivi rooted).

C'è un codice a
https://github.com/microg/NetworkLocation
che sembra implementare un LocationProvider. Non l'ho guardato in dettaglio (ancora) o costruito, quindi non posso dire se funziona e cosa è richiesto per questo. Ma forse fornisce alcune indicazioni.

+0

Se creo il mio LocationProvider, come posso registrarlo/installarlo? Non riesco a trovare nulla nel manifest ... – JohnyTex

+1

Non l'ho mai fatto da solo, ma c'è un fornitore di posizione personalizzato disponibile su https://github.com/microg/android_packages_apps_UnifiedNlp. Questa applicazione dovrebbe avere tutto il codice per l'installazione di un fornitore di posizione adeguato. Se si desidera provare l'app, è necessario installarla come app di sistema (basta installarla e spostarla nella cartella dell'app di sistema tramite Terminal o adb) e necessita di almeno un back-end, che può essere un'app dello spazio utente. – user149408

+0

Grazie! Anche se questa libreria sembra mancare: https://github.com/android/platform_frameworks_base/tree/master/location/lib Dove posso trovarlo? Ho davvero bisogno di controllare l'intero pronti contro termine? – JohnyTex

Problemi correlati