2010-08-03 9 views

Respuesta

0

Leer un tutorial sobre Android location provider mock

+0

No intento proporcionar datos de ubicación simulada para mi propia aplicación, pero para tener un LocationProvider adicional para todas las demás aplicaciones en el teléfono para elegir. –

+0

Por lo tanto, el tutorial sobre el "simulacro de proveedor de ubicación de Android" no es útil. –

1

No se puede hacer.

El problema es que solo los OEM pueden instalar un nuevo proveedor de ubicación. Un desarrollador externo no puede otorgar a su aplicación el permiso requerido para instalar un nuevo proveedor de ubicación (android.permission.INSTALL_LOCATION_PROVIDER).

ver la respuesta de Dianne Hackborn (ingeniero marco Android) en este hilo:

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

Para instalar un nuevo proveedor de ubicación, usted debe desarrollar un firmware nuevo conjunto (como http://www.cyanogenmod.com/), insertar su nueva proveedor de ubicación en este firmware e instalar todas estas cosas en el teléfono del usuario.

ver este SO hilo, así: Why are these permissions being refused?

Todo esto debido a preocupaciones de seguridad.

+0

¿Es posible en un dispositivo rooteado? – JohnyTex

+1

@JohnyTex sí, es posible en el dispositivo rooteado (o rom personalizado). Consulte las instrucciones en https://github.com/microg/android_packages_apps_UnifiedNlp –

6

Para fines de desarrollo y prueba puede implementar un proveedor de ubicación simulada. Debe habilitar "Permitir ubicaciones simuladas" en las opciones de desarrollador para que las aplicaciones puedan ver las ubicaciones de ese proveedor.

Para un ejemplo de código, un vistazo a GPX reproducción:
https://github.com/johncarpenter/Android-GPX-Mock-Location-Provider

El código para registrar el proveedor de ubicación comienza en la línea 203 del archivo android/src/com/twolinessoftware/android/PlaybackService.java.

Si desea un proveedor de ubicación "real" (por ejemplo, implementar su funcionalidad como parte de una aplicación de usuario final), algunas fuentes dicen que no se puede hacer a menos que el proveedor esté en un paquete firmado con la clave del sistema, por lo Tendría que construir su propia ROM desde la fuente, firmarla con su clave, firmar con la misma clave su proveedor de ubicación e instalar ambos en su teléfono.

Sin embargo, Android en algún momento introdujo proveedores de ubicación "desagregados". Aparentemente lo necesitaban para mover su propio NetworkLocationProvider del núcleo de Android al paquete de Google Apps.

Todavía no he visto un proveedor de ubicación desglosado trabajando en la práctica y no conozco ningún código de código abierto que lo use, pero parece que la versión reciente de Android tiene soporte para proveedores de ubicación "de posventa".

El código fuente de la biblioteca respectiva está en
https://github.com/CyanogenMod/android_frameworks_base/tree/cm-10.1/location/lib

un proveedor de ubicación tendría que extenderse com.android.location.provider.LocationProviderBase.

Las clases y los métodos están documentados en el código.

Editar: En cuanto a
https://github.com/android/platform_frameworks_base/blob/master/core/res/AndroidManifest.xml
a partir de la línea 607, parece que el nivel de protección para el permiso INSTALL_LOCATION_PROVIDER es signatureOrSystem. Esto significa que cualquier aplicación que use esta característica (es decir, instale un proveedor de ubicación, no necesariamente el proveedor de ubicación) debería estar firmada con la misma clave que la plataforma (lo que requeriría que construyera todo su sistema Android desde la fuente) o instalarse como una aplicación de sistema (que podría funcionar en dispositivos rooteados).

Hay algo de código en
https://github.com/microg/NetworkLocation
que parece poner en práctica un LocationProvider. No lo he visto en detalle (todavía) ni lo he construido, por lo que no puedo decir si funciona y qué se requiere para ello. Pero tal vez proporciona algunos consejos.

+0

. Si hago mi propio LocationProvider, ¿cómo lo registro/instalo? No puedo encontrar nada en el manifiesto ... – JohnyTex

+1

Nunca he hecho esto por mí mismo, pero hay un proveedor de ubicación personalizado en https://github.com/microg/android_packages_apps_UnifiedNlp. Esta aplicación debe tener todo el código para instalar un proveedor de ubicación adecuado. Si desea probar la aplicación, debe instalarla como una aplicación de sistema (simplemente instálela y muévala a la carpeta de la aplicación del sistema a través de Terminal o adb) y necesita al menos un backend, que puede ser una aplicación de espacio de usuario. – user149408

+0

¡Gracias! Aunque esta lib parece faltar: https://github.com/android/platform_frameworks_base/tree/master/location/lib ¿Dónde puedo encontrarlo? ¿Realmente necesito revisar todo el repositorio? – JohnyTex

Cuestiones relacionadas