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

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

String packageName = getPackageName();

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

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

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

如何在这个类中取包名?

【问题讨论】:

标签: android class package


【解决方案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 获取应用程序的包名。

    【讨论】:

    【解决方案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(); 
        }
        

        【讨论】:

        • 发布答案时,请考虑您的答案是否贡献了其他答案中尚未提及的内容。
        猜你喜欢
        • 1970-01-01
        • 2012-10-09
        • 2013-03-14
        • 2020-03-19
        • 1970-01-01
        • 2020-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多