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
'program tip' 카테고리의 다른 글
바이트 배열을 비트 맵으로 변환하는 방법 (0) | 2020.08.03 |
---|---|
자식에서 여러 원격 지점 삭제 (0) | 2020.08.03 |
테이블의 한 필드 만 기준으로 Linq에서 구별 (0) | 2020.08.03 |
Object.freeze () 대 const (0) | 2020.08.03 |
Vue 데이터에서 href로 값을 전달하는 방법은 무엇입니까? (0) | 2020.08.03 |