Erstellen Sie ein Java-Modul, das beim Starten Ihrer App zunächst ausgeführt wird. Dieses Modul würde die Android Application-Klasse erweitern und alle globalen App-Variablen initialisieren sowie app-weite Hilfsroutinen enthalten -
public class MyApplicationName extends Application {
private final String PACKAGE_NAME = "com.mysite.myAppPackageName";
public String getPackageName() { return PACKAGE_NAME; }
}
Natürlich könnte dies Logik enthalten, um den Paketnamen vom Android-System zu erhalten; jedoch ist der obige Code kleiner, schneller und sauberer als das Abrufen des Paketnamens von Android.
Vergewissern Sie sich, dass Sie einen Eintrag in Ihrer AndroidManifest.xml-Datei platzieren, um Android mitzuteilen, das Anwendungsmodul vor dem Ausführen von Aktivitäten auszuführen -
Dann, um den Paketnamen aus einem anderen Modul zu erhalten, geben Sie ein
MyApp myApp = (MyApp) getApplicationContext();
String myPackage = myApp.getPackageName();
Die Verwendung eines Anwendungsmoduls bietet Ihnen auch einen Kontext für Module, die einen Kontext benötigen, aber keinen haben.
7 Stimmen
Die akzeptierte Antwort wird dazu führen, dass Ihre Anwendung gelegentlich ABSTÜRZT - lesen Sie die Kommentare von AddDev & Turbo und danken Sie beiden für die vorgeschlagenen Lösungen.
1 Stimmen
Es könnte sein, dass du keine andere Möglichkeit hast, aber aus Gründen bewährter Praxis würde ich sagen, es ist besser, dies auf irgendeine Weise in die Klasse zu übergeben, in der du es benötigst, ausgehend von deinem letzten Kontextpunkt. Du greifst auf Laufzeitkontextinformationen in einer Klasse zu, die nichts über Kontexte auf eine statische Weise weiß - das stört mich. Ein anderer Ansatz wäre, es irgendwo fest codiert einzufügen.