2010-09-14 16 views
11

Cela devrait être simple mais je ne peux pas trouver d'informations sur ce ...chaîne de paquet d'Android manifeste

Je veux simplement lire la valeur du package dans le manifeste Android ...

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

la raison est simple, je dois appeler context.getResources(). GetIdentifier (...) et j'ai besoin du paquet.

puisque ce code sera réutilisé dans d'autres applications Je veux le rendre infaillible quand je l'exporte et que je n'ai donc pas besoin de changer la valeur à chaque fois.

quelqu'un sait comment faire cela?

Répondre

17

Au sein d'une activité, vous pouvez simplement appeler getPackageName(). Si vous devez arriver à besoin de données supplémentaires du manifeste, vous pouvez utiliser la classe PackageInfo: http://developer.android.com/reference/android/content/pm/PackageInfo.html

Exemple de réglage d'un TextView à votre version de l'application:

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

cela ne doit pas être complètement correct, car packageInfo.versionName retourne l'applicationId défini dans le fichier gradle et non l'attribut package i n votre manifeste. Comme dans la plupart des cas, cela fonctionne de la même façon, mais lorsque vous travaillez avec buildFlavors qui changent votre applicationId, cela ne fonctionnera plus. Je ne trouve pas non plus de solution à cela mais j'accède au paquet attribtue à travers la classe 'R'. C'est-à-dire que l'attribut-package n'affecte que le nom du paquet pour la classe 'R' et non l'applicationId ni vos paquets de classe normaux –

2

À partir de votre "principale" Activity classe:

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

est utile de noter que cela ne fonctionnera que si votre L'activité principale se trouve dans un package portant le même nom que le package manifeste (et non, par exemple, un sous-package). –

+0

Le package de la classe ne doit pas correspondre au package défini dans le manifeste, ce qui n'est pas correct. cas cela fonctionnera –