Mir ist die Verfügbarkeit von Context.getApplicationContext () und View.getContext () bekannt , über die ich Context.getPackageName () aufrufen kann , um den Paketnamen einer Anwendung abzurufen.
Sie funktionieren, wenn ich von einer Methode aus aufrufe, für die ein View
oder ein Activity
Objekt verfügbar ist, aber wenn ich den Paketnamen aus einer völlig unabhängigen Klasse ohne View
oder suchen möchte Activity
, gibt es eine Möglichkeit, dies (direkt oder indirekt) zu tun?
android
package
android-context
ef2011
quelle
quelle
Antworten:
Eine Idee ist, eine statische Variable in Ihrer Hauptaktivität zu haben, die als Paketname instanziiert wird. Dann verweisen Sie einfach auf diese Variable.
Sie müssen es in der
onCreate()
Methode der Hauptaktivität initialisieren :Global für die Klasse:
Dann..
Sie können dann über darauf zugreifen
Main.PACKAGE_NAME
.quelle
final
dass es unveränderlich, nur in einem Konstruktor und nur einmal initialisierbar ist .onCreate()
ist kein Konstruktor. Bitte korrigieren Sie, wenn ich mich irre.onCreate
trotzdem erneut aufgerufen werden, sodass diese Lösung immer noch kein Problem sein sollte.Wenn Sie das Gradle-Android-Plugin verwenden, um Ihre App zu erstellen, können Sie verwenden
um den Paketnamen aus einem beliebigen Bereich abzurufen, inkl. eine statische.
quelle
Wenn Sie mit dem Wort "irgendwo" meinen, ohne eine explizite
Context
(zum Beispiel aus einem Hintergrund-Thread) zu haben, sollten Sie eine Klasse in Ihrem Projekt wie folgt definieren:Dann
manifest
müssen Sie diese Klasse in dasName
Feld auf derApplication
Registerkarte einfügen. Oder bearbeiten Sie die XML und setzen Sieund dann von überall, wo Sie anrufen können
Ich hoffe es hilft.
quelle
Application.onCreate()
wurde geändert, um dies widerzuspiegeln: Sie lautet jetzt speziell "Wird aufgerufen, wenn die Anwendung gestartet wird, vor Aktivitäten, Diensten oder Empfängerobjekten (ausgenommen Inhaltsanbieter)".Wenn Sie gradle build verwenden, verwenden Sie Folgendes:
BuildConfig.APPLICATION_ID
um den Paketnamen der Anwendung abzurufen .quelle
quelle
Sie können Ihren Paketnamen folgendermaßen erhalten:
Hier sind die Optionen:
quelle
Sie können eine undokumentierte Methode verwenden
android.app.ActivityThread.currentPackageName()
:Vorsichtsmaßnahme: Dies muss im Haupt-Thread der Anwendung erfolgen.
Vielen Dank an diesen Blog-Beitrag für die Idee: http://blog.javia.org/static-the-android-application-package/ .
quelle
Für diejenigen, die Gradle verwenden, wie @Billda erwähnt, können Sie den Paketnamen erhalten über:
Dies gibt Ihnen den Paketnamen, der in Ihrem App-Gradle deklariert ist:
Wenn Sie daran interessiert sind, den Paketnamen zu erhalten, der von Ihren Java-Klassen verwendet wird (was manchmal anders ist als
applicationId
), können Sie ihn verwendenWenn Sie sich nicht sicher sind, welches Sie verwenden sollen, lesen Sie hier :
quelle
Hoffe es wird funktionieren.
quelle
Erstellen Sie ein Java-Modul, das beim Starten Ihrer App zunächst ausgeführt werden soll. Dieses Modul würde die Android-Anwendungsklasse erweitern und alle globalen App-Variablen initialisieren sowie app-weite Dienstprogrammroutinen enthalten -
Dies könnte natürlich Logik beinhalten, um den Paketnamen vom Android-System zu erhalten; Der oben genannte Code ist jedoch kleiner, schneller und sauberer als der von Android.
Stellen Sie sicher, dass Sie einen Eintrag in Ihre AndroidManifest.xml-Datei einfügen, um Android anzuweisen, Ihr Anwendungsmodul auszuführen, bevor Sie Aktivitäten ausführen.
Geben Sie dann ein, um den Paketnamen von einem anderen Modul zu erhalten
Durch die Verwendung eines Anwendungsmoduls erhalten Sie auch einen Kontext für Module, die einen Kontext benötigen, aber keinen haben.
quelle
Verwenden Sie: BuildConfig.APPLICATION_ID, um den PAKETNAMEN überall abzurufen (dh Dienste, Empfänger, Aktivität, Fragment usw.)
Beispiel: String PackageName = BuildConfig.APPLICATION_ID;
quelle
Importieren Sie einfach Android.app ,, dann können Sie Folgendes verwenden:
<br/>Application.getProcessName()<br/>
Rufen Sie den aktuellen Namen des Bewerbungsprozesses ohne Kontext, Ansicht oder Aktivität ab.
quelle