Android App Name - litonghui/TechBlog GitHub Wiki

在Android 开发中,偶尔会遇到获取App Name 的方法,深入了解一下。

分析关于 Android Manifest 节点

<application
    android:name=".HahaApplication"
    android:allowBackup="true"
    android:hardwareAccelerated="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
android:label 节点为我们所找,即对应的资源文件 @string/app_name
1.根据资源获取name
     public static String getAppName(Context context){
         return   context.getString(R.string.app_name);
     }
2.如果 android:label 对应的资源不是 @string/app_name ,我们可以通过资源Id 反向查找。
     public static String getAppName(Context context){
         int lableInfo = context.getApplicationInfo().labelRes;
         return  context.getString(lableInfo);
     }
3.如果当AndroidManifest 在二次打包时候,修改label 对应的值,通过资源查找的方式就不可靠了,需要修改:
     public static String getAppName(Context context){
        String name="";
        PackageManager packageManager = context.getPackageManager();
        ApplicationInfo applicationInfo = null;
        try {
            applicationInfo = packageManager.getApplicationInfo(context.getApplicationInfo().packageName, 0);
            name = (String) (applicationInfo != null ? packageManager.getApplicationLabel(applicationInfo) : name);
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
       return name;
     }

总结,以上三种方式按照不同的需要,对应不同解法,获取相应app name 。

踩过的坑:ApplicationInfo.name 获取 app name ,获取的appInfo.name 为 null ,造成空指针异常。
   try {
            ApplicationInfo appInfo = context.getPackageManager()
                    .getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
            name = appInfo.name;
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }