2010-09-14 7 views
11

Esto debe ser simple, pero no puedo encontrar ninguna información sobre este ...cadena paquete de Android manifestar

simplemente quiero leer el valor del paquete en el manifiesto androide ...

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="THIS" 

el motivo es simple Tengo que llamar al context.getResources(). GetIdentifier (...) y necesito el paquete.

ya que este código se reutilizará en otras aplicaciones Quiero hacerlo a prueba de tontos cuando lo exporte y, por lo tanto, no tenga que cambiar el valor cada vez.

¿Alguien sabe cómo hacer esto?

Respuesta

17

dentro de una actividad, sólo tiene que llamar getPackageName(). Si llegara a necesitar datos adicionales a partir del manifiesto, se puede utilizar la clase packageinfo: http://developer.android.com/reference/android/content/pm/PackageInfo.html

Ejemplo de configuración de un TextView a su versión de la aplicación:

try { 
     PackageManager pm = getPackageManager(); 
     PackageInfo packageInfo = pm.getPackageInfo(this.getPackageName(), 0); 
     TextView version = (TextView) findViewById(R.id.version); 
     version.setText(packageInfo.versionName); 
    } catch (NameNotFoundException e) {} 
+1

Esto no es completamente correcto, ya que packageInfo.versionName devuelve la applicationId definida en el archivo gradle y no el atributo del paquete i n tu manifiesto Como en la mayoría de los casos, esto es lo mismo, funcionará bien, pero cuando trabaje con buildFlavors que modifique su applicationId, esto dejará de funcionar. No encuentro ninguna solución para esto, pero accediendo al paquete attribtue a través de la clase 'R'. A saber, el atributo de paquete afecta solo al nombre del paquete para la clase 'R' y no a la aplicación ni a sus paquetes de clase normales –

2

Desde su "principal" Activity clase:

String package = this.getClass().getPackage().getName(); 
+6

Vale la pena señalar que esto sólo funcionará si su la actividad principal está en un paquete con el mismo nombre que el paquete manifest (y no, por ejemplo, un subpaquete) –

+0

el paquete de la clase no debe coincidir con el paquete definido en el manifiesto, por lo que no es correcto, aunque en la mayoría casos esto funcionará –

Cuestiones relacionadas