2013-08-16 2 views
4

PackageManager.getApplicationLabel(ApplicationInfo)을 사용하여 응용 프로그램 이름을 가져 왔습니다. 그러나이 이름은 장치 로켈 구성 및 응용 프로그램 자원 문자열에 따라 변경 될 수 있습니다.PackageManager에서 현지화 된 레이블 이름을 가져 오는 방법

그렇다면 지정된 지역화 된 레이블을 얻는 편리한 방법이 있는지 궁금합니다. 존재하지 않는다면 null을 반환할까요? 예 : PackageManager.getApplicationLabel(ApplicationInfo info, Locale prefereLocale)? 모든

답변

5

첫째, 라벨 얻기 위해 행동의 순서를 설명 할 수 있습니다 :

  1. ApplicationInfo (응용 프로그램 정보가 public int labelRes이 - 라벨의 자원 ID)를 얻을;
  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!"); 
    } 

는 다음과 같은 출력을 (두 번째 문자열 라벨 내가 코드에서 설정 러시아어 로케일에 - 'RU') 생성합니다 :

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