2013-08-16 2 views
4

Я использую PackageManager.getApplicationLabel(ApplicationInfo), чтобы получить имя приложения. Но это имя может изменяться в соответствии с конфигурацией локали устройства и строкой ресурса приложения.Способ получить локализованное имя ярлыка от PackageManager

Так что, интересно, есть ли какой-либо удобный способ получить указанную локализованную метку (или вернуть null, если не существует)? Например, PackageManager.getApplicationLabel(ApplicationInfo info, Locale prefereLocale)?

ответ

5

Прежде всего, позволяет описать порядок действий, чтобы получить ярлык:

  1. Получить ApplicationInfo (информация приложение public int labelRes - идентификатор ресурса метки);
  2. Получить ресурсы приложения для извлечения labelRes с его помощью - getResourcesForApplication();
  3. Установите необходимую локаль для получения Resources и извлеките строку labelRes (обратите внимание, что я не упомянул nonLocalizedLabel, который необходимо проверить перед выполнением всех вышеперечисленных элементов);

Сам код очень прост (например, код из класса деятельности):

PackageManager pm = getPackageManager(); 
    try { 
     ApplicationInfo galleryInfo = pm.getApplicationInfo("com.android.gallery3d", PackageManager.GET_META_DATA); 

     if (null != galleryInfo) { 
      final String label = String.valueOf(pm.getApplicationLabel(galleryInfo)); 

      Log.w(TAG, "Current app label is " + label); 

      final Configuration config = new Configuration(); 

      config.locale = new Locale("ru"); 

      final Resources galleryRes = pm.getResourcesForApplication("com.android.gallery3d"); 

      galleryRes.updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 

      final String localizedLabel = galleryRes.getString(galleryInfo.labelRes); 

      Log.w(TAG, "Localized app label is " + localizedLabel); 
     } 
    } catch (PackageManager.NameNotFoundException e) { 
     Log.e(TAG, "Failed to obtain app info!"); 
    } 

Производит следующий вывод (вторая строка метка в русской локали, который я предлагаю из кода - «ру»):

08-16 19:23:04.425: WARN/MyActivity(29122): Current app label is Gallery 
08-16 19:23:04.425: WARN/MyActivity(29122): Localized app label is Галерея 
+0

Да, вот что я хочу! благодаря:) – mianlaoshu

Смежные вопросы