Android-애플리케이션 이름을 얻는 방법? (패키지 이름 아님)


120

내 매니페스트에는 다음이 있습니다.

  <application
    android:name=".MyApp"
    android:icon="@drawable/ic_launcher_icon"
    android:label="@string/app_name"
    android:debuggable="true">

라벨 요소는 어떻게 얻나요?

참고 : 내 코드가 다른 사람의 내부에서 실행 중이므로 @ string / app_name에 액세스 할 수 없습니다.

답변:


182

리소스의 이름을 명시 적으로 지정하거나 패키지 이름이있는 예외에 대해 걱정할 필요가없는 다른 답변보다 쉬운 방법이 있습니다. 리소스 대신 문자열을 직접 사용한 경우에도 작동합니다.

그냥 해:

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로 래핑 할 필요가 없습니다.


3
에서 레이블을 실제로 사용하는 한 잘 작동합니다 android:name. 문자열을 하드 코딩하면 실패합니다.
Snicolas 2013-08-29

2
사실이지만 앱 이름은 일반적으로 물론 문자열 리소스를 통해 지정됩니다. 유선으로 연결된 문자열은 Lint로 표시되며 권장되지 않습니다.
darrenp 2013 년

1
문자열이 발견되지 않는 경우 그냥이 android.content.res.Resources $ NotFoundException를 던질 것이라고 조심
zenocon

zenocon의 조언에 따라 try ... catch.
superarts.org

nonLocalizableLabel 문서에 대해 알고 계십니까? : "... 당신은 아마도 getApplicationLabel (ApplicationInfo)을 원할 것입니다."
David

55

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");
}

또는 문자열 리소스 ID를 알고있는 경우 다음을 통해 직접 가져올 수 있습니다.

getString(R.string.appNameID);

string.xml에서 앱 이름을 읽는 동안 때때로 정크 문자가 표시됩니다. 나는 잘 모릅니다 왜 ..Ex : ¥ & # 141 सà; ठ& # 149; à ¥ & # 136; नठ°
하리 크리슈 난

37
public static String getApplicationName(Context context) {
    return context.getApplicationInfo().loadLabel(context.getPackageManager());
}

3
loadLabelCharSequence. 나는 당신 .toString()이 결국 필요하다고 생각합니다 .
joshbodily

return은 CharSequence 또는 String.valueOf ();
Heriberto Rivera

25

모든 컨텍스트 사용에서 :

getApplicationInfo().loadLabel(getPackageManager()).toString();

15

패키지 이름을 알고 있다면 다음 스 니펫을 사용하십시오.

ApplicationInfo ai;
try {
    ai = pm.getApplicationInfo(packageName, 0);
} catch (final NameNotFoundException e) {
    ai = null;
}
final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");

1
@RishabhTayal pm은 PackageManager 객체를 나타냅니다.
Vipul Shah 2013

@VipulShah 메신저 알 수없는 때마다 점점
NIDA

6

패키지 이름이 아닌 애플리케이션 이름 만 필요하면이 코드를 작성하십시오.

 String app_name = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();

6

에서 코 틀린 , 응용 프로그램 이름을 얻기 위해 다음과 같은 코드를 사용 :

        // 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)
        }

3

Kotlin에서는 간단합니다.

val appLabel = context.applicationInfo.nonLocalizedLabel

2

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
  }
}


1

에 추가 된 소스 댓글 NonLocalizedLabel은 이제 다음과 같이 안내합니다.

return context.getPackageManager().getApplicationLabelFormatted(context.getApplicationInfo());

0

사용 해 보셨습니까? PackageManager#getActivityInfo()방법을 ? 애플리케이션 이름을 포함해야하는 필드가 있습니다.

여기 에서 매우 유사한 질문에 대한 답변을 참조 하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.