2011-06-08 14 views
37

Tengo dos aplicaciones que usan el mismo proveedor de contenido, pero no puedo poner el mismo proveedor de contenido en ambas aplicaciones: muestra el error INSTALL_FAILED_CONFLICTING_PROVIDER. Así que puse mi proveedor de contenido en una 3ra .apk y lo utilicé de dos aplicaciones y está funcionando bien.Proveedor de contenido INSTALL_FAILED_CONFLICTING_PROVIDER (instalar el proveedor de contenido como una aplicación independiente)

Ahora el problema es que la aplicación del proveedor de contenido se debe instalar antes de que cualquiera de esas dos aplicaciones se pueda instalar en el dispositivo. De lo contrario, muestra el error Provider no encontrado durante la instalación.

Entonces, ¿cómo puedo asegurarme de que la aplicación del proveedor esté instalada antes de que se instale alguno de los demás?

¿Hay alguna manera de fusionar el apk del proveedor de contenido con los otros dos por separado, por lo que se instalarán juntos como dos aplicaciones y no mostrará el error INSTALL_FAILED_CONFLICTING_PROVIDER?

Necesito combinar el proveedor de contenido apk con ambas aplicaciones, porque el usuario no puede instalar ambas aplicaciones o puede instalarlas en un solo dispositivo.

+1

Este es un problema muy interesante. Una similar explicada aquí: http://stackoverflow.com/questions/3578751/conflicting-content-providers. No estoy seguro de si hay una respuesta para ti, por eso la agregué como comentario. Esto me recuerda el problema que tienes en C/C++ con archivos de encabezado, y por qué usas # ifndef/# define – plainjimbo

+1

@James gracias por tu respuesta. Pensé en la solución provista en el tema que mencionaste, pero estoy buscando algo mejor. Poner al proveedor en una aplicación independiente e instalarlo primero resuelve el error INSTALL_FAILED_CONFLICTING_PROVIDER y creo que es mejor que mantener dos proveedores. Pero necesito asegurarme de que la aplicación del proveedor esté instalada primero o de alguna manera fusionar los apk como mencioné. – Imon

+0

Consulte también una respuesta completa de @CommonsWare http://stackoverflow.com/a/10791144/94363 – rds

Respuesta

13

Una solución que puedo pensar es, hacer que el proveedor de contenido sea parte de las aplicaciones con diferentes paquetes internos. Y exportarlo usando android: exported = true. Aunque ambos podrían estar usando el mismo código.

Al inicio de la aplicación, comprueba si el otro proveedor de contenido existe en el dispositivo si está allí, comienza a usarlo, de lo contrario recurre al proveedor de contenido local. cuando la otra aplicación se instala, puede hacer la misma comprobación.

Para proteger su proveedor de cotent de todos los demás, puede definir un permiso personalizado para protegerlo, para que sus aplicaciones solo puedan usarlo o también puede poner alguna autenticación personalizada como alguna clave secreta para acceder al proveedor de contenido. puede tener este código de autenticación en todos los métodos de proveedor de contenido.

+2

Parece una solución posible, pero no es lo que esperaba. Tal vez no hay forma de empaquetar dos apk como uno en Android. – Imon

37

Puede resolverlo cambiando el valor de android:authorities en su archivo AndroidManifest.xml. El motivo del error es que otra aplicación instalada en su dispositivo ya usa el mismo valor para android:authorities.

9

Para resolver este error: Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER

el cambio del valor de android:authorities en su archivo AndroidManifest.xml otra aplicación instalada en su dispositivo ya utiliza el mismo valor para android: autoridades.

0

Significa que su teléfono ya tiene un proveedor con las mismas autorizaciones, registrado por diferentes aplicaciones (podría ser su otro ejemplo). Cambie las autoridades de su proveedor, es decir, android:authorities y listo.

2

Usas un único dato único como el número de registro de la API de Facebook o algo similar en tu archivo de manifiesto (AndroidManifest.xml) para ambos programas: para el que ya está instalado y para el que intentas y no puedes instalarlo.Es necesario:

  1. Trata de encontrar algo como esto y comprobar que es para su programa actual :

android:authorities="com.facebook.app.FacebookContentProvider23473465463573466" android:name="com.facebook.FacebookContentProvider" android:exported="true"/>

  1. Comprobar si no es Dublicate en otro programas si es para el programa que intenta instalar.
Cuestiones relacionadas