127

私のマニフェストには次のものがあります。

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

ラベル要素を取得するにはどうすればよいですか?

注: 私のコードは他の人のコード内で実行されているため、@string/app_name へのアクセス権がありません

4

15 に答える 15

189

リソースに明示的に名前を付ける必要がない、またはパッケージ名の例外について心配する必要がない、他の回答よりも簡単な方法があります。リソースの代わりに文字列を直接使用した場合にも機能します。

ただ行う:

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 でラップする必要はありません。

于 2013-02-27T14:23:02.513 に答える
50

ジャワ

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

Kotlin (拡張として)

fun Context.getAppName(): String = applicationInfo.loadLabel(packageManager).toString()
于 2013-05-10T16:17:51.043 に答える
29

任意のコンテキスト使用から:

getApplicationInfo().loadLabel(getPackageManager()).toString();
于 2014-09-11T07:10:54.927 に答える
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)");
于 2012-06-27T15:03:47.760 に答える
8

Kotlinでは、次のコードを使用してアプリケーション名を取得します。

        // 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)
        }
于 2019-04-27T07:42:20.373 に答える
7

パッケージ名ではなく、アプリケーション名のみが必要な場合は、このコードを記述してください。

 String app_name = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();
于 2014-07-15T09:19:11.820 に答える
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
  }
}
于 2012-06-27T15:09:17.070 に答える
1

さて、別の洗練されたオプションは

Application.Context.ApplicationInfo.NonLocalizedLabel

アプリケーション要素にハードコードされた Android ラベルが検証されました。

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

参照: http://developer.android.com/reference/android/content/pm/PackageItemInfo.html#nonLocalizedLabel

于 2016-01-24T22:08:25.680 に答える
0

メソッドを使用してみましたPackageManager#getActivityInfo()か?アプリケーションの名前を含むフィールドがあります。

非常によく似た質問への回答を参照してください

于 2012-06-27T15:04:21.123 に答える