Answers:
有一个比其他答案更简单的方法,它不需要您显式命名资源或担心包名称的异常。如果您直接使用字符串而不是资源,它也可以使用。
做就是了:
public static String getApplicationName(Context context) {
ApplicationInfo applicationInfo = context.getApplicationInfo();
int stringId = applicationInfo.labelRes;
return stringId == 0 ? applicationInfo.nonLocalizedLabel.toString() : context.getString(stringId);
}
希望这可以帮助。
编辑
根据Snicolas的评论,我对上面的内容进行了修改,以便它不会尝试解析ID为0的情况。相反,它使用nonLocalizedLabel作为回退。无需在try / catch中进行换行。
try ... catch。
如果出于诸如android:label =“ MyApp”之类的原因未在AndroidManifest.xml的strings.xml / hardcoded中提及
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)");
如果只需要应用程序名称,而不是程序包名称,则只需编写此代码。
String app_name = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();
在Kotlin中,使用以下代码获取应用程序名称:
// Get App Name
var appName: String = ""
val applicationInfo = this.getApplicationInfo()
val stringId = applicationInfo.labelRes
if (stringId == 0) {
appName = applicationInfo.nonLocalizedLabel.toString()
}
else {
appName = this.getString(stringId)
}
在Kotlin中,它很简单:
val appLabel = context.applicationInfo.nonLocalizedLabel
使用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
}
}
好的,另一个时尚的选择是
Application.Context.ApplicationInfo.NonLocalizedLabel
验证了application元素上的硬编码android标签。
<application android:label="Big App"></application>
参考:http : //developer.android.com/reference/android/content/pm/PackageItemInfo.html#nonLocalizedLabel
android:name。如果您对字符串进行硬编码,则它将失败。