android,如何获取包名?

Posted

技术标签:

【中文标题】android,如何获取包名?【英文标题】:android, how to get package name? 【发布时间】:2012-01-28 10:00:35 【问题描述】:

在我的应用程序中,我需要知道包名的名称。当我想在活动中抓住它但我不能在其他课程中抓住它时,我没有问题。以下代码在活动中工作,但我不知道为什么它在简单类中有问题。

String packageName = getPackageName();

在我的课堂上,我尝试编写以下代码:

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

但编译器说 getApplicationContext() 方法未为此类定义。

如何在这个类中取包名?

【问题讨论】:

使用 BuildConfig.class.getPackage().toString(); ***.com/questions/6589797/… 【参考方案1】:

简单的,或者另一种方法是将 Context 传递给辅助类构造函数:

MyClassConstructor(Context context)

        String packageName = context.getPackageName(); 

【讨论】:

【参考方案2】:

使用类的实例,您可以通过使用getClass().getPackage().getName() 来获取包名

示例代码

ClassA instanceOfClass = new ClassA();
String packageName = instanceOfClass.getClass().getPackage().getName();
System.out.println("Package Name = " + packageName);

【讨论】:

但是您不是创建了一个全新的 ClassA 实例,它实际上会无缘无故地自行执行一些代码吗? 我的项目中有一个库,我将项目中的上下文传递给库。库调用 context.getPackageName(),它获取库的包名而不是我的项目的包名。怎么可能lib 通过项目的上下文获取我项目的包名?【参考方案3】:

如果您使用 gradle build,请使用:BuildConfig.APPLICATION_ID 获取应用程序的包名。

【讨论】:

请注意,ApplicationID 可能与您的 java 类使用的实际包名称不同。 ***.com/questions/6589797/…【参考方案4】:

使用以下

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

                        String packageName2 = am.getRunningTasks(1).get(0).topActivity.getPackageName();

【讨论】:

【参考方案5】:

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();
    


【讨论】:

【参考方案6】:

最简单的答案是创建一个类名构造函数并在该构造函数中传递 ApplicationContext -

ClassConstructor(Context context)

        String packageName = context.getPackageName(); 

【讨论】:

发布答案时,请考虑您的答案是否贡献了其他答案中尚未提及的内容。

以上是关于android,如何获取包名?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android中获取库的包名?

如何从android中的包名中获取类名?

如何在android中获取Fragment的包名(不是Activity的)[重复]

如何在 android 2.3 及更高版本中获取当前启动器的包名?

Android7如何获取当前运行的Activity的包名

Android7如何获取当前运行的Activity的包名