program tip

Android-애플리케이션 이름을 얻는 방법

radiobox 2020. 8. 3. 08:35
반응형

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


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

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


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

또는 String 리소스 ID를 알고 있다면 직접 통해 얻을 수 있습니다.

getString(R.string.appNameID);

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

어떤 맥락에서나 사용 :

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

패키지 이름이 아닌 응용 프로그램 이름 만 필요한 경우이 코드를 작성하십시오.

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

RunningAppProcessInfo를 다음과 같이 사용하여 Appliction 이름을 가져옵니다.

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

좋아, 또 다른 매끄러운 옵션은

Application.Context.ApplicationInfo.NonLocalizedLabel

응용 프로그램 요소에 하드 코딩 된 Android 레이블이 있는지 확인했습니다.

<application android:label="Big App"></application>

참조 : http://developer.android.com/reference/android/content/pm/PackageItemInfo.html#nonLocalizedLabel


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

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

PackageManager#getActivityInfo()방법을 사용해 보셨습니까 ? 응용 프로그램 이름을 포함해야하는 필드가 있습니다.

여기에서 비슷한 질문에 대한 답변을 참조 하십시오 .


The source comment added to NonLocalizedLabel directs us now to:

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

참고URL : https://stackoverflow.com/questions/11229219/android-how-to-get-application-name-not-package-name

반응형