目前常用的获取appname的方法有下面两种: public static String getAppName(Context context) { try { PackageManager packageManager = context.getPackageManager(); PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0); int labelRes = packageInfo.applicationInfo.labelRes; return context.getResources().getString(labelRes); } catch (Exception e) { e.printStackTrace(); } return null; }
或者:
public static String getAppName(Context context) { try { PackageManager packageManager = context.getPackageManager(); PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0); return String.valueOf(packageManager.getApplicationLabel(packageInfo.applicationInfo)); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return null; }
两种方法看上去都没有问题,在manifest文件的application节点中设置:
android:label=“@string/app_name”
发现两种方法都能取到,以为万事大吉了。但是实际项目中我们给 android:label 设置 app_name 的时候可能不止这一种方式。比如:
android:label = "${app_name}"
甚至是直接设置 android:label = "app_name"。就会发现第一种方式获取appname返回值为null。
第一个getAppName的方法只能获取到 android:label="@string/app_name" 这种格式设置的应用名称。 对 android:label="app_name" 和 android:label = "${app_name}"这两种方式都不兼容。
第二个getAppName的方法可以顺利获取到三种表达式设置的 label 值。