436 Stimmen

Wie kann man den Paketnamen von überall bekommen?

Ich bin mir der Verfügbarkeit von Context.getApplicationContext() und View.getContext() bewusst, durch die ich tatsächlich Context.getPackageName() aufrufen kann, um den Paketnamen einer Anwendung abzurufen.

Sie funktionieren, wenn ich von einer Methode aus aufrufe, zu der ein View oder ein Activity-Objekt verfügbar ist, aber wenn ich den Paketnamen von einer völlig unabhängigen Klasse ohne View oder Activity finden möchte, gibt es einen Weg, das zu tun (direkt oder indirekt)?

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.

2voto

pharid Punkte 49

Verwendung: Verwenden Sie BuildConfig.APPLICATION_ID, um den PAKETNAMEN überall zu erhalten (z.B. in Services, Empfängern, Aktivitäten, Fragmenten, etc.)

Beispiel: String PackageName = BuildConfig.APPLICATION_ID;

1 Stimmen

Wenn Sie in einer Bibliothek/Modul sind, wird dies die Bibliotheksanwendungs-ID abrufen.

0voto

Earl Allen Punkte 19

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.

0voto

untitled Punkte 111

Einfach Android.app importieren dann können Sie verwenden: Application.getProcessName()

Erhalten Sie den aktuellen Anwendungsprozessnamen ohne Kontext, Ansicht oder Aktivität.

0voto

Jeff Landis Punkte 1

BuildConfig.APPLICATION_ID und Package müssen nicht immer gleich sein. Verwenden Sie "buildConfigField", um Gradle das Paket zum BuildConfig hinzuzufügen und darauf als BuildConfig.PACKAGE zuzugreifen. https://developer.android.com/studio/build/gradle-tips

defaultConfig {
    applicationId "com.example.app.name"
    minSdkVersion 24
    targetSdkVersion 29
    versionCode 1
    versionName '0.1.0'
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    buildConfigField("String", "PACKAGE", "\"com.example.app\"")
}

0voto

Aalishan Ansari Punkte 541

Dies funktioniert für mich in Kotlin

       override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var packageName=applicationContext.packageName // muss diese Zeile hinzufügen
        Log.d("YourTag",packageName)
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X