Zdaję sobie sprawę z dostępności Context.getApplicationContext () i View.getContext () , za pomocą których mogę wywoływać Context.getPackageName () w celu pobrania nazwy pakietu aplikacji.
Działają, jeśli wywołuję metodę, do której dostępny jest obiekt View
lub Activity
obiekt, ale jeśli chcę znaleźć nazwę pakietu z całkowicie niezależnej klasy bez View
lub czy Activity
istnieje sposób (bezpośrednio lub pośrednio)?
android
package
android-context
ef2011
źródło
źródło
Odpowiedzi:
Ideą jest posiadanie zmiennej statycznej w głównym działaniu, tworzonej jako nazwa pakietu. Następnie po prostu odwołaj się do tej zmiennej.
Będziesz musiał zainicjować go w
onCreate()
metodzie głównej czynności :Globalny w klasie:
Następnie..
Następnie możesz uzyskać do niego dostęp za pośrednictwem
Main.PACKAGE_NAME
.źródło
final
sprawia , że jest niezmienny, można go inicjować tylko w konstruktorze i tylko raz .onCreate()
nie jest konstruktorem. Proszę poprawić, jeśli się mylę.onCreate
będzie musiał zostać ponownie wywołany, więc to rozwiązanie nadal nie powinno stanowić problemu.Jeśli używasz wtyczki gradle-android-plugin do tworzenia aplikacji, możesz jej użyć
aby pobrać nazwę pakietu z dowolnego zakresu, w tym. statyczny.
źródło
Jeśli ze słowem „gdziekolwiek” masz na myśli bez wyraźnego
Context
(na przykład z wątku w tle), powinieneś zdefiniować klasę w swoim projekcie:Następnie
manifest
musisz dodać tę klasę doName
pola naApplication
karcie. Lub edytuj xml i umieśća następnie z dowolnego miejsca, do którego możesz zadzwonić
Mam nadzieję, że to pomoże.
źródło
Application.onCreate()
została zmieniona, aby to odzwierciedlić: teraz wyraźnie stwierdza: „Wywoływany podczas uruchamiania aplikacji, przed jakąkolwiek aktywnością, usługą lub obiektami odbiorczymi (z wyłączeniem dostawców treści)”.Jeśli używasz kompilacji stopniowej, użyj tego:
BuildConfig.APPLICATION_ID
aby uzyskać nazwę pakietu aplikacji.źródło
źródło
Możesz uzyskać nazwę swojego pakietu w następujący sposób:
Oto opcje:
źródło
Możesz użyć nieudokumentowanej metody
android.app.ActivityThread.currentPackageName()
:Zastrzeżenie: należy to zrobić w głównym wątku aplikacji.
Dzięki temu postowi na blogu za pomysł: http://blog.javia.org/static-the-android-application-package/ .
źródło
Dla tych, którzy używają Gradle, jak wspomniano w @Billda, nazwę pakietu można uzyskać poprzez:
To daje nazwę pakietu zadeklarowaną w klasie aplikacji:
Jeśli chcesz uzyskać nazwę pakietu używaną przez klasy Java (która czasem jest inna niż
applicationId
), możesz użyćJeśli nie wiesz, którego użyć, przeczytaj tutaj :
źródło
Mam nadzieję, że to zadziała.
źródło
Utwórz moduł Java, który będzie początkowo uruchamiany podczas uruchamiania aplikacji. Moduł ten rozszerzyłby klasę aplikacji Android i zainicjalizowałby wszystkie globalne zmienne aplikacji, a także zawierałby procedury narzędziowe dla całej aplikacji -
Oczywiście może to obejmować logikę uzyskiwania nazwy pakietu z systemu Android; powyższe jest jednak mniejszym, szybszym i czystszym kodem niż uzyskanie go od Androida.
Pamiętaj, aby umieścić wpis w pliku AndroidManifest.xml, aby poinformować Androida o uruchomieniu modułu aplikacji przed uruchomieniem jakichkolwiek działań -
Następnie, aby uzyskać nazwę pakietu z dowolnego innego modułu, wpisz
Korzystanie z modułu aplikacji daje również kontekst dla modułów, które potrzebują, ale nie mają kontekstu.
źródło
Użyj: BuildConfig.APPLICATION_ID, aby uzyskać NAZWĘ PAKIETU w dowolnym miejscu (tj. Usługi, odbiornik, aktywność, fragment itp.)
Przykład: String PackageName = BuildConfig.APPLICATION_ID;
źródło
Wystarczy zaimportować Android.app, a następnie można użyć:
<br/>Application.getProcessName()<br/>
Uzyskaj bieżącą nazwę procesu aplikacji bez kontekstu, widoku lub aktywności.
źródło