android getAppName踩坑记录

目前常用的获取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 值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值