在我的清单中,我有:
<application
android:name=".MyApp"
android:icon="@drawable/ic_launcher_icon"
android:label="@string/app_name"
android:debuggable="true">
如何获取标签元素?
注意:我的代码在别人的内部运行,所以我无权访问@string/app_name
在我的清单中,我有:
<application
android:name=".MyApp"
android:icon="@drawable/ic_launcher_icon"
android:label="@string/app_name"
android:debuggable="true">
如何获取标签元素?
注意:我的代码在别人的内部运行,所以我无权访问@string/app_name
有一种比其他答案更简单的方法,不需要您明确命名资源或担心包名称的异常。如果您直接使用字符串而不是资源,它也可以工作。
做就是了:
public static String getApplicationName(Context context) {
ApplicationInfo applicationInfo = context.getApplicationInfo();
int stringId = applicationInfo.labelRes;
return stringId == 0 ? applicationInfo.nonLocalizedLabel.toString() : context.getString(stringId);
}
希望这可以帮助。
编辑
根据 Snicolas 的评论,我已经修改了上面的内容,以便它不会尝试解析 0 的 id。而是使用,nonLocalizedLabel
作为退避。无需包装在 try/catch 中。
如果在 AndroidManifest.xml 中的 strings.xml/hardcoded 中未提及,无论出于何种原因,例如 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");
}
或者,如果您知道字符串资源 ID,那么您可以直接通过
getString(R.string.appNameID);
public static String getApplicationName(Context context) {
return context.getApplicationInfo().loadLabel(context.getPackageManager()).toString();
}
fun Context.getAppName(): String = applicationInfo.loadLabel(packageManager).toString()
从任何上下文使用:
getApplicationInfo().loadLabel(getPackageManager()).toString();
如果您知道包名称,请使用以下代码段
ApplicationInfo ai;
try {
ai = pm.getApplicationInfo(packageName, 0);
} catch (final NameNotFoundException e) {
ai = null;
}
final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");
在 Kotlin 中很简单:
val appLabel = context.applicationInfo.nonLocalizedLabel.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)
}
如果您只需要应用程序名称,而不需要包名称,那么只需编写此代码。
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
}
}
添加到的源评论NonLocalizedLabel
现在指示我们:
return context.getPackageManager().getApplicationLabelFormatted(context.getApplicationInfo());
好吧,伙计们,另一个时尚的选择是
Application.Context.ApplicationInfo.NonLocalizedLabel
验证了应用程序元素上的硬编码 android 标签。
<application android:label="Big App"></application>
参考:http: //developer.android.com/reference/android/content/pm/PackageItemInfo.html#nonLocalizedLabel
默认情况下,您有一个由 AndroidStudio 生成的名为“app_name”的字符串资源。为什么不简单地使用它?或为此目的创建的任何其他字符串资源。比调用几个内部方法来得出一个你必须首先给自己设置的值要容易得多。
您是否尝试过使用该PackageManager#getActivityInfo()
方法?将有一个字段应包含应用程序的名称。
在这里查看一个非常相似的问题的答案。
你可以用这个
JAVA
ApplicationInfo appInfo = getApplicationContext().getApplicationInfo();
String applicationLabel = getApplicationContext().getPackageManager().getApplicationLabel(appInfo).toString();
科特林
在kotlin中获取应用程序名称的简单函数
fun getApplicationName() : String{
var applicationName = ""
try {
val applicationInfo = application.applicationInfo
val stringId = applicationInfo.labelRes
if (stringId == 0) {
applicationName = applicationInfo.nonLocalizedLabel.toString()
}
else {
applicationName = application.getString(stringId)
}
} catch (e: Exception) {
e.printStackTrace()
}
return applicationName
}