在静态类中使用时,getPackageManager()会出错

时间:2015-08-08 07:51:10

标签: java android

因此,下面的代码放在一个活动中时工作正常但是当作为静态方法放在静态java类中时,getPackageManager会生成错误...不确定原因

public String VersionInfo(){
    String version = "";
    try {
        version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
    } catch (PackageManager.NameNotFoundException e) {
        Log.e("tag", e.getMessage());
    }

    return version;
}

3 个答案:

答案 0 :(得分:1)

如果在活动外部调用,则需要使用上下文调用getPackageManager()。传递versionInfo方法中的上下文并使用它来获取包管理器。像这样:

public String VersionInfo(final Context context){
String version = "";
try {
    version = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
    Log.e("tag", e.getMessage());
}

return version;
}

答案 1 :(得分:1)

尝试这种方式:

在您的Activity中,您可以这样打电话:

Test.VersionInfo(mActivity);  // where  mActivity is nothing but current context this. you can use this instead.

以下是静态类:

static class Test{

         public static String VersionInfo(Context ctx){
             String version = "";
             try {
                 version = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0).versionName;
             } catch (PackageManager.NameNotFoundException e) {
                 Log.e("tag", e.getMessage());
             }

             return version;
         }
  }

答案 2 :(得分:0)

此方法

/** Return PackageManager instance to find global package information. */
    public abstract PackageManager getPackageManager();

Context类中定义。因此,要访问您需要上下文对象,或者您可以在Context的子类中访问。 以下是Activity -

的层次结构
Context (android.content)
-ContextWrapper (android.content)
 -ContextThemeWrapper (android.view)
  -Activity (android.app)

因此,Activity可以访问方法getPackageManager()