我可以从android.R.attrs.versionName获取版本名吗?

我可以从android.R.attrs.versionName获取版本名吗?,android,attr,Android,Attr,我一直在玩,这是我第一次在电视上看到的。这声称显示了应用程序的版本,但我尝试了一些似乎不起作用的方法: 作为文本视图查看,仅显示编号: <TextView ... android:text="?android:attr/versionName"/> 还有其他想法吗?如果没有从代码或XML获取版本的方法,那么它似乎毫无用处 我知道还有其他方法可以获得版本名,我对它们不感兴趣,我只是好奇这个特定的变量,以及它的用途 但我试过一些似乎不起作用的方法 我不希望这两个都能起作用。

我一直在玩,这是我第一次在电视上看到的。这声称显示了应用程序的版本,但我尝试了一些似乎不起作用的方法:

  • 作为文本视图查看,仅显示编号:

    <TextView ...
         android:text="?android:attr/versionName"/>
    
  • 还有其他想法吗?如果没有从代码或XML获取版本的方法,那么它似乎毫无用处

    我知道还有其他方法可以获得版本名,我对它们不感兴趣,我只是好奇这个特定的变量,以及它的用途

    但我试过一些似乎不起作用的方法

    我不希望这两个都能起作用。
    视图
    不是清单文件。布局不是清单文件

    如果没有从代码或XML获取版本的方法,那么它似乎毫无用处

    它只是不用于处理视图。android.R.attr中很少有与视图相关的内容。在Android内部解析清单时,最多可以使用此值。我的猜测是,它在android.R.attr中作为其他元数据声明的副作用,正如。

    尝试以下方法:
        TextView yourtextview = 
        PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA);
        yourtextview.setText(pInfo.versionName));
    
    TextView yourtextview=
    PackageInfo pInfo=getPackageManager().getPackageInfo(getPackageName(),PackageManager.GET_META_DATA);
    yourtextview.setText(pInfo.versionName));
    

    或者正如您在页面上看到的:
    android:text=“?android:attr/versionName”
    下面是一个可以使用的简单类。它的编码是为了处理Android SDK 28中不推荐使用的packageInfo.versionCode,并抑制不推荐使用的lint错误

    public class Version  {
    
        private Activity activity;
    
        public Version(Activity activity) {
            this.activity = activity;
        }
    
        @SuppressWarnings("deprecation")
        public long getCode() {
            long code = 0;
            try {
                if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
                    code = activity.
                            getPackageManager().getPackageInfo
                            (activity.getPackageName(), 0).getLongVersionCode();
                } else{
                    code = activity.
                        getPackageManager().getPackageInfo
                        (activity.getPackageName(), 0).versionCode;
                }
            } catch (PackageManager.NameNotFoundException e) {
            }
            return code;
        }
    
        public String getName() {
            String name = "";
            try {
                name = activity.
                        getPackageManager().getPackageInfo
                         (activity.getPackageName(), 0).versionName;
            } catch (PackageManager.NameNotFoundException e) {
            }
            return name;
        }
    }
    

    根据我的文章,我知道还有其他方法可以得到它,而链接的问题不起作用。
        android:text="?android:attr/versionName"
    
    public class Version  {
    
        private Activity activity;
    
        public Version(Activity activity) {
            this.activity = activity;
        }
    
        @SuppressWarnings("deprecation")
        public long getCode() {
            long code = 0;
            try {
                if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
                    code = activity.
                            getPackageManager().getPackageInfo
                            (activity.getPackageName(), 0).getLongVersionCode();
                } else{
                    code = activity.
                        getPackageManager().getPackageInfo
                        (activity.getPackageName(), 0).versionCode;
                }
            } catch (PackageManager.NameNotFoundException e) {
            }
            return code;
        }
    
        public String getName() {
            String name = "";
            try {
                name = activity.
                        getPackageManager().getPackageInfo
                         (activity.getPackageName(), 0).versionName;
            } catch (PackageManager.NameNotFoundException e) {
            }
            return name;
        }
    }