[英]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.