2010-09-14 5 views
11

Dies sollte einfach sein, aber ich kann keine Informationen dazu finden ...Erstes Paket Zeichenfolge aus Android manifestierte

ich einfach den Paketwert im Android Manifest lesen will ...

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

der Grund ist einfach muss ich context.getResources() aufrufen. GetIdentifier (...) und ich brauche das Paket.

Da dieser Code in anderen Apps wiederverwendet werden soll, möchte ich ihn beim Export als idiotensicher erachten und muss daher den Wert nicht jedes Mal ändern.

weiß jemand, wie man das macht?

Antwort

17

Innerhalb einer Aktivität können Sie einfach anrufen getPackageName(). Wenn Sie geschehen, sollen zusätzliche Daten aus dem Manifest müssen, können Sie die Package-Klasse verwenden: http://developer.android.com/reference/android/content/pm/PackageInfo.html

Beispiel für eine Textview auf Ihre App-Version Einstellung:

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

Dies scheint nicht vollständig korrekt zu sein, da packageInfo.versionName die in der Gradle-Datei definierte Anwendungs-ID und nicht das Paket-Attribut i zurückgibt n dein Manifest. Wie in den meisten Fällen ist dies das gleiche, es wird gut funktionieren, aber wenn Sie mit buildFlavors arbeiten, die Ihre ApplicationId ändern, wird dies nicht mehr funktionieren. Ich finde auch keine Lösung dafür, sondern über die 'R'-Klasse auf das Paketattribut zuzugreifen. Das Paket-Attribut betrifft nämlich nur den Paketnamen für die 'R'-Klasse und nicht die applicationId weder Ihre normalen Klassenpakete –

2

Von Ihrem "main" Activity Klasse:

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

Sein bemerkenswert, dass dies nur funktioniert, wenn Ihr Hauptaktivität ist in einem Paket mit dem gleichen Namen wie das Manifest-Paket (und nicht zum Beispiel ein Unterpaket) –

+0

das Paket der Klasse muss nicht mit dem Paket im Manifest definiert entsprechen, so dass dies nicht korrekt ist, obwohl in den meisten Fälle, die dies funktioniert –