Android:获取应用程序名称(不是包名称)

在我的清单中,我有:

<application android:name=".MyApp" android:icon="@drawable/ic_launcher_icon" android:label="@string/app_name" android:debuggable="true"> 

我如何获得标签元素? 注意:我的代码运行在其他人的内部,所以我没有访问@ string / app_name。

有一个比其他答案更简单的方法,不需要明确指定资源名称,也不必担心包名称exception。 如果您直接使用string而不是资源,它也可以工作。

做就是了:

 public static String getApplicationName(Context context) { ApplicationInfo applicationInfo = context.getApplicationInfo(); int stringId = applicationInfo.labelRes; return stringId == 0 ? applicationInfo.nonLocalizedLabel.toString() : context.getString(stringId); } 

希望这可以帮助。

编辑

根据Snicolas的评论,我已经修改了上面的内容,以便它不会尝试parsingid,如果它是0.相反,它使用nonLocalizedLabel作为退避。 无需在try / catch中打包。

如果没有在AndroidManifest.xml中的strings.xml / hardcoded中提到,不pipe是android:label =“MyApp”

 public String getAppLable(Context context) { PackageManager packageManager = context.getPackageManager(); ApplicationInfo applicationInfo = null; try { applicationInfo = packageManager.getApplicationInfo(context.getApplicationInfo().packageName, 0); } catch (final NameNotFoundException e) { } return (String) (applicationInfo != null ? packageManager.getApplicationLabel(applicationInfo) : "Unknown"); } 

或者如果你知道string资源ID,那么你可以直接通过

 getString(R.string.appNameID); 
 public static String getApplicationName(Context context) { return context.getApplicationInfo().loadLabel(context.getPackageManager()); } 

如果你知道包名,然后使用下面的代码片段

 ApplicationInfo ai; try { ai = pm.getApplicationInfo(packageName, 0); } catch (final NameNotFoundException e) { ai = null; } final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)"); 

从任何上下文使用:

 getApplicationInfo().loadLabel(getPackageManager()).toString(); 

如果您只需要应用程序名称,而不是包名称,那么只需编写该代码即可。

  String app_name = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString(); 

获取应用程序名称使用RunningAppProcessInfo作为:

 ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE); List l = am.getRunningAppProcesses(); Iterator i = l.iterator(); PackageManager pm = this.getPackageManager(); while(i.hasNext()) { ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next()); try { CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA)); Log.w("LABEL", c.toString()); }catch(Exception e) { //Name Not FOund Exception } } 

你有没有尝试过使用PackageManager#getActivityInfo()方法? 将会有一个应该包含应用程序名称的字段。

在这里看到一个非常类似的问题的答案。

好吧,另一个光滑的select是

Application.Context.ApplicationInfo.NonLocalizedLabel

在应用程序元素上validation了硬编码的android标签。

<application android:label="Big App"></application>

参考: http : //developer.android.com/reference/android/content/pm/PackageItemInfo.html#nonLocalizedLabel