簡體   English   中英

如何在 android 中獲得 package 名稱?

[英]How can I get package name in android?

我需要自己編寫一些實用程序 class 並且我需要 android 應用程序的包名。 雖然我發現只能在 Activity 等中使用的 packageManager 有上下文。 我只想在我的 class 中獲取包名,它將在 android 應用程序中使用。 那么我該怎么做呢? 謝謝!

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

您還可以創建 function:

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

以下常量無需上下文即可使用。

BuildConfig.APPLICATION_ID

您可以獲得已安裝應用程序的 package 名稱:

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

如果你想找到你的應用程序的 package 名稱:

context.getPackageName();

getApplicationContext().getPackageName()將給出 package 名稱。

您可以通過這種方式創建 Util Class:

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
  }
}

我已經看到以下兩種從上下文變量開始獲取 package 名稱的方法:

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

context.getPackageName()

他們不會總是給出相同的答案嗎? 在某些情況下,一種方法比另一種更可取嗎?

我認為getPackageName()可以直接在活動中使用,而無需調用getApplicationContext 我自己檢查過。工作得很好。

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


                      }

在這里將其添加到您的實用程序 class。 它確保處理不同的“風格”和調試/發布版本,因為其他答案沒有:

@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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM