android, как получить имя пакета?

В моем приложении мне нужно знать название пакета. У меня нет проблем, когда я хочу взять его на занятиях, но не могу взять его в других классах. Следующий код работает, но я не знаю, почему у него проблема в простом классе.

String packageName = getPackageName();

В своем классе я пытался написать такой код:

Context context = getApplicationContext();
String packageName = context.getPackageName();

но компилятор сказал, что getApplicationContext() метод не определен для этого класса.

Как я могу взять имя пакета в этом классе?


person Hesam    schedule 27.12.2011    source источник
comment
используйте BuildConfig.class.getPackage (). toString (); stackoverflow.com / questions / 6589797 /   -  person user1506104    schedule 24.07.2018


Ответы (6)


Простой или другой способ - передать Context конструктору вспомогательного класса:

MyClassConstructor(Context context){

        String packageName = context.getPackageName(); 
}
person Lumis    schedule 27.12.2011

Используя экземпляр класса, вы можете получить имя пакета, используя getClass().getPackage().getName() для экземпляра

Образец кода

ClassA instanceOfClass = new ClassA();
String packageName = instanceOfClass.getClass().getPackage().getName();
System.out.println("Package Name = " + packageName);
person Sunil Kumar Sahoo    schedule 27.12.2011
comment
Но разве вы не создаете полностью новый экземпляр ClassA, который на самом деле будет выполнять какой-то код самостоятельно без уважительной причины? - person Lumis; 27.12.2011
comment
У меня есть библиотека в моем проекте, и я передаю контекст из своего проекта в библиотеку. Библиотека вызывает context.getPackageName (), который получает имя пакета библиотеки, а не имя пакета моего проекта. Как библиотека может получить имя пакета моего проекта через контекст проекта? - person Allen Vork; 12.12.2016

Если вы используете сборку gradle, используйте это: BuildConfig.APPLICATION_ID, чтобы получить имя пакета приложения.

person Mahendra Liya    schedule 11.08.2015
comment
обратите внимание, что ApplicationID может отличаться от фактического имени пакета, используемого вашими java-классами. stackoverflow.com / questions / 6589797 / - person user1506104; 24.07.2018

Используйте следующие

ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);

                        String packageName2 = am.getRunningTasks(1).get(0).topActivity.getPackageName();
person bindal    schedule 27.12.2011

getApplicationContext () - это метод ContextWrapper (суперкласс Activity).

Если вы хотите использовать его в своих классах, вам нужно будет передать ссылку на контекст или его подкласс, а затем использовать его.

http://developer.android.com/reference/android/content/ContextWrapper.html#getPackageName ()

class MyClass {
    Context mContext;

    public MyClass(Context ctx) [
        this.mContext = ctx;

    }

    String getPackageName() {
        mContext.getPackageName();
    }

}
person Rajdeep Dua    schedule 27.12.2011

Самый простой ответ - создать конструктор имени класса и передать ApplicationContext в этом конструкторе -

ClassConstructor(Context context){

        String packageName = context.getPackageName(); 
}
person Anurag Mishra    schedule 28.07.2016
comment
Публикуя ответы, подумайте, вносит ли ваш ответ что-то, чего еще не было сказано в других ответах. - person laalto; 28.07.2016