Мне известно о доступности Context.getApplicationContext () и View.getContext () , через который я могу на самом деле вызвать Context.getPackageName (), чтобы получить имя пакета приложения.
Они работают, если я вызываю метод, для которого доступен объект View
или Activity
объект, но если я хочу найти имя пакета в полностью независимом классе без View
или Activity
, есть ли способ сделать это (прямо или косвенно)?
android
package
android-context
ef2011
источник
источник
Ответы:
Идея состоит в том, чтобы в вашей основной деятельности была статическая переменная, созданная в качестве имени пакета. Тогда просто обратитесь к этой переменной.
Вы должны будете инициализировать его в
onCreate()
методе основного действия :Глобально для класса:
Затем..
Вы можете получить к нему доступ через
Main.PACKAGE_NAME
.источник
final
делает его неизменным, инициализируемым только в конструкторе и только один раз .onCreate()
не конструктор Пожалуйста, исправьте, если я ошибаюсь.onCreate
все равно придется вызывать снова, так что это решение по-прежнему не должно быть проблемой.Если вы используете плагин gradle-android-plugin для создания своего приложения, то вы можете использовать
извлечь имя пакета из любой области, в т.ч. статический.
источник
Если со словом «где угодно» вы имеете в виду, не имея явного
Context
(например, из фонового потока), вы должны определить класс в вашем проекте, например:Затем по вашему
manifest
необходимо добавить этот класс вName
поле наApplication
вкладке. Или отредактируйте xml и поставьтеа потом откуда угодно можно позвонить
Надеюсь, поможет.
источник
Application.onCreate()
была изменена, чтобы отразить это: теперь она конкретно гласит: «Вызывается при запуске приложения, перед любыми действиями, услугами или объектами получателя (кроме поставщиков контента)».Если вы используете сборку Gradle, используйте это:
BuildConfig.APPLICATION_ID
чтобы получить имя пакета приложения.источник
источник
Вы можете получить название вашего пакета следующим образом:
Вот варианты:
источник
Вы можете использовать недокументированный метод
android.app.ActivityThread.currentPackageName()
:Предостережение: это должно быть сделано в главном потоке приложения.
Спасибо за этот пост в блоге за идею: http://blog.javia.org/static-the-android-application-package/ .
источник
Для тех, кто использует Gradle, как упоминалось @Billda, вы можете получить имя пакета через:
Это дает вам имя пакета, объявленное в вашем приложении gradle:
Если вы заинтересованы в получении имени пакета, используемого вашими классами Java (которое иногда отличается от
applicationId
), вы можете использоватьЕсли вы не уверены, какой из них использовать, прочитайте здесь :
источник
Надеюсь, это сработает.
источник
Создайте Java-модуль, который будет изначально запускаться при запуске вашего приложения. Этот модуль будет расширять класс приложений Android и инициализировать любые глобальные переменные приложения, а также содержать подпрограммы утилит всего приложения -
Конечно, это может включать логику для получения имени пакета из системы Android; однако, приведенный выше код меньше, быстрее и чище, чем его получение с Android.
Обязательно поместите запись в свой файл AndroidManifest.xml, чтобы сообщить android о запуске модуля приложения перед выполнением каких-либо действий.
Затем, чтобы получить имя пакета из любого другого модуля, введите
Использование модуля приложения также дает вам контекст для модулей, которые нуждаются, но не имеют контекста.
источник
Используйте: BuildConfig.APPLICATION_ID, чтобы получить ИМЯ ПАКЕТА в любом месте (т. Е. Услуги, получатель, активность, фрагмент и т. Д.)
Пример: String PackageName = BuildConfig.APPLICATION_ID;
источник
Просто импортируйте Android.app ,, тогда вы можете использовать:
<br/>Application.getProcessName()<br/>
Получить текущее имя процесса приложения без контекста, представления или действия.
источник