2011-08-26 7 views
8

Supongamos que tengo 2 Aplicación A y B.Obtención de recursos de otra aplicación

Quiero tener acceso a los recursos (dibujables, imágenes, cuerdas) de una aplicación B desde una aplicación. ¿Como podría hacerlo?

Editar:

También puede designar un proyecto de Android como un proyecto de la biblioteca, que permite que pueda ser compartida con otros proyectos que dependen de ella. Una vez que un proyecto de Android se designa como proyecto de biblioteca, no se puede instalar en un dispositivo.

¿Significa que no puedo usar mi biblioteca en el mercado de Android? Mi objetivo es utilizar los recursos predeterminados de la Aplicación A, pero también si alguien puede descargar la Aplicación B y usarla.

+0

¿Por qué sería una buena idea? – Arafangion

+0

¿Eso no haría ilegible tu código? –

Respuesta

20

Si usted es el desarrollador de ambas aplicaciones, entonces, el enfoque correcto sería, como se señala, crear un proyecto de biblioteca Android y compartirlo entre aplicaciones.

Nevertheles, todavía se puede acceder a los recursos de otra aplicación, incluso si este no es su aplicación:

Resources res = context.getPackageManager().getResourcesForApplication("com.example.foo") 
+0

Los recursos tienen identificadores asignados que cambiaron cada compilación. ¿Cómo puedo acceder a ellos por nombre? Vea también http://stackoverflow.com/questions/4593046/is-it-possible-to-access-resources-in-another-apk-without-using-content-provider – elcuco

+1

Pruebe 'Resources.html # getIdentifier (..) ': (http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier(java.lang.String,%20java.lang.String,%20java.lang.String) –

5

Si ambas aplicaciones son su propia y que desea agrupar estos recursos a la acumulación de tiempo:

Crear Android Library Project, poner todos los recursos necesarios en ella y hacer referencia a ella desde ambas aplicaciones.


Editar para tu edición: Usted puede usar la biblioteca en el mercado androide. Usted simplemente no puede usarlo solo (compilarlo). Tienes que construir una aplicación que use la biblioteca. Cuando construyes esa aplicación, todo el contenido necesario básicamente se obtiene de la biblioteca y se copia a tu apk. Que puedes poner en el mercado como de costumbre.

Esto no funciona cuando desea acceder a los recursos de una aplicación que se descarga en el dispositivo en tiempo de ejecución. Un proyecto de biblioteca agrupa todos los recursos cuando construye la aplicación que lo usa. La respuesta de Peter Knego es la correcta al acceder en tiempo de ejecución.

+0

He editado la pregunta. Se agregaron algunas preocupaciones de su enlace. –

+0

Agregó una respuesta. :) –

+0

Gracias, sí, quiero usarlo en tiempo de ejecución, utilizaré la forma de Peter Knego. –

1

Es posible si esas dos aplicaciones son suyas. O puede usar cualquier biblioteca de Android para ambas aplicaciones. Si lo desea, también puede crear su propio Android Library para este tipo de trabajo. Thnx.

0

respuesta de Pedro anterior es grande, pero me gustaría profundizar un poco más ...

cuando se controla appA y APPB y desea obtener un dibujable de APPB, mientras que en appA, a continuación, hacer lo siguiente:

  1. obtener el identificador de la estirable cuando en AppB (por ejemplo, R.drawable.iconInAppB)
  2. Luego, en appA

    Resources res = context.getPackageManager().getResourcesForApplication("com.example.appB"); 
    
        Drawable d = res.getDrawable(integer); 
    //integer was what appB assigned to R.drawable.iconInAppB 
    

* Nota: El ID entero asignado a R.drawable.iconInAppB cambiará con el tiempo por lo que no se basan en hardcoding.Guardo los pares clave-valor (String resourceName, int resourceId) en una base de datos en appB y los accedo usando un proveedor de contenido.

+0

¿Podría explicar el -1 por favor? –

1

Por ejemplo, vamos a la cadena de matriz con el ID de entryvalues_font_size del paquete com.android.settings

String[] enries = null; 
try { 
    // You can get PackageManager from the Context 
    Resources res = getPackageManager().getResourcesForApplication("com.android.settings"); 
    int resId = res.getIdentifier("entryvalues_font_size", "array", "com.android.settings"); 

    if (resId != 0) { 
     enries = res.getStringArray(resId); 
    } 
} 
catch (PackageManager.NameNotFoundException e) { 
    e.printStackTrace(); 
} 
Cuestiones relacionadas