如何在android中获取包名?

时间:2011-08-17 09:53:05

标签: java android

我需要自己编写一些util类,我需要android app的packagename。 虽然我发现packageManager只能用于具有上下文的Activity等。我只想在我的类中获取packagename,这将在android应用程序中使用。那我该怎么做呢?谢谢!

9 个答案:

答案 0 :(得分:33)

使用:getPackageManager().getPackageInfo(getPackageName(), 0).packageName 或者只是MyContext.getPackageName()

您还可以创建一个功能:

public String getPackageName(Context context) {
    return context.getPackageName();
}

答案 1 :(得分:12)

以下常量可用,无需上下文。

BuildConfig.APPLICATION_ID

答案 2 :(得分:4)

您可以获取已安装应用的包名称:

ArrayList<PackageInfo> res = new ArrayList<PackageInfo>();
        PackageManager pm = getApplicationContext().getPackageManager();
        List<PackageInfo> packs = pm.getInstalledPackages(0);

如果您想查找应用的包名称:

context.getPackageName();

答案 3 :(得分:2)

getApplicationContext().getPackageName()将提供包名称。

答案 4 :(得分:1)

List<ApplicationInfo> packages;
    PackageManager pm;
    pm = getPackageManager();
             get a list of installed apps.
            packages = pm.getInstalledApplications(0);

ActivityManager mActivityManager = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);

   for (ApplicationInfo packageInfo : packages) {
   //packageInfo.packageName contains package name


                      }

答案 5 :(得分:1)

你可以用这种方式创建一个Util类:

public class AppInfo{
  private static Context cxt;
  public static String PACKAGE_INFO;
  public static String init(Context context){
    cxt = context;
    PACKAGE_INFO = cxt.getPackageName();
  }
}

那么你可以这样使用它

public class MyActivity extends Activity{
  @Override
  public void onCreate(Bundle bundle){
    ...
    AppInfo.init(getApplicationContext());
    ...
  }
}

然后你可以这样称呼它:

public class someClass{
  public void someMethod(){
    String packageInfo = AppInfo.PACKAGE_INFO;
    //Do what you wish
  }
}

答案 6 :(得分:1)

我已经看到以下两种方法从Context变量开始获取包名称:

context.getPackageManager().getPackageInfo(context.getPackageName(), 0).packageName

context.getPackageName()

他们不会总是给出相同的答案吗?在某些情况下,有一种方法比另一种更好吗?

答案 7 :(得分:1)

我认为getPackageName()可直接在活动中使用,而无需调用getApplicationContext。自己检查一下。工作得很好。

答案 8 :(得分:0)

这里将此添加到您的util类中。它确保处理不同的“风格”和调试/发布版本,因为其他答案不会:

@Nullable
public static String getApplicationPackageName(@NonNull Context context)
{
    final PackageInfo packageInfo = getPackageInfo(context);
    if (packageInfo.applicationInfo == null)
    {
        return null;
    }
    // Returns the correct “java” package name that was defined in your
    // AndroidManifest.xml.
    return packageInfo.applicationInfo.packageName;
}

// Convenience method for getting the applications package info.
@NonNull
private static PackageInfo getPackageInfo(@NonNull final Context context)
{
    final PackageManager packageManager = context.getPackageManager();

    try
    {
        return packageManager.getPackageInfo(context.getPackageName(), 0);
    }
    catch (final PackageManager.NameNotFoundException ignored)
    {
        //noinspection ConstantConditions: packageInfo should always be available for the embedding app.
        return null;
    }
}