Android - Как узнать название приложения? (Не имя пакета)
В моем манифесте я имею:
<application
android:name=".MyApp"
android:icon="@drawable/ic_launcher_icon"
android:label="@string/app_name"
android:debuggable="true">
Как получить элемент метки?
Примечание. Мой код выполняется внутри чужого кода, поэтому у меня нет доступа к @string/app_name
Ответы
Ответ 1
Там проще, чем другие ответы, которые не требуют явного указания ресурса или беспокойства об исключениях с именами пакетов. Он также работает, если вы использовали строку напрямую, а не ресурс.
Просто выполните:
public static String getApplicationName(Context context) {
ApplicationInfo applicationInfo = context.getApplicationInfo();
int stringId = applicationInfo.labelRes;
return stringId == 0 ? applicationInfo.nonLocalizedLabel.toString() : context.getString(stringId);
}
Надеюсь, что это поможет.
Edit
В свете комментария от Snicolas я изменил приведенное выше, чтобы он не пытался разрешить идентификатор, если он равен 0. Вместо этого он использует nonLocalizedLabel
как отсрочку. Нет необходимости в обертке в try/catch.
Ответ 2
Если это не указано в файле strings.xml/hardcoded в AndroidManifest.xml по любой причине, такой как 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, вы можете напрямую его получить через
getString(R.string.appNameID);
Ответ 3
public static String getApplicationName(Context context) {
return context.getApplicationInfo().loadLabel(context.getPackageManager());
}
Ответ 4
Из любого использования контекста:
getApplicationInfo().loadLabel(getPackageManager()).toString();
Ответ 5
Если вы знаете имя пакета, используйте следующий фрагмент
ApplicationInfo ai;
try {
ai = pm.getApplicationInfo(packageName, 0);
} catch (final NameNotFoundException e) {
ai = null;
}
final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");
Ответ 6
Если вам нужно только имя приложения, а не имя пакета, просто напишите этот код.
String app_name = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();
Ответ 7
Получить имя приложения с помощью RunningAppProcessInfo as:
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
}
}
Ответ 8
Хорошо, ребята, еще один гладкий вариант -
Application.Context.ApplicationInfo.NonLocalizedLabel
проверено на жесткую кодированную метку Android в элементе приложения.
<application android:label="Big App"></application>
Ссылка:
http://developer.android.com/reference/android/content/pm/PackageItemInfo.html#nonLocalizedLabel
Ответ 9
В 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)
}
Ответ 10
Пробовали ли вы использовать метод PackageManager#getActivityInfo()
? Будет поле, которое должно содержать имя приложения.
См. ответ на очень похожий вопрос здесь.
Ответ 11
Исходный комментарий, добавленный к NonLocalizedLabel
направляет нас к:
return context.getPackageManager().getApplicationLabelFormatted(context.getApplicationInfo());