【问题标题】:Can I get the version name from android.R.attrs.versionName?我可以从 android.R.attrs.versionName 获取版本名称吗?
【发布时间】:2014-03-06 06:18:21
【问题描述】:

我一直在玩android.R.attr.versionName,这是我第一次看到this question。这声称显示应用程序的版本,但我尝试了一些似乎不起作用的方法:

  1. 作为TextView查看,只显示数字:

    <TextView ...
         android:text="?android:attr/versionName"/>
    
  2. 获取为字符串,返回空指针异常:

    TypedValue value=new TypedValue();
    getActivity().getTheme().resolveAttribute(android.R.attr.versionName,value,true);
    String version=value.coerceToString().toString();
    

还有其他想法吗?如果无法从代码或 XML 获取版本,这似乎毫无用处。

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

【问题讨论】:

    标签: android attr


    【解决方案1】:

    下面是一个您可以使用的简单类。它被编码用于处理 Android SDK 28 中已弃用的 packageInfo.versionCode,并抑制了 deprecation 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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个:

          TextView yourtextview = 
          PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA);
          yourtextview.setText(pInfo.versionName));
      

      或者你可以在you have linked这个页面上看到:

          android:text="?android:attr/versionName"

      【讨论】:

      • 根据我的文字,我知道还有其他方法可以得到它,并且链接的问题不起作用。
      【解决方案3】:

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

      我不希望这两个工作。 View 不是清单文件。布局不是清单文件。

      如果没有办法从代码或 XML 获取版本,这似乎毫无用处。

      它根本不用于处理视图。 android.R.attr 中很少有与视图相关的内容。最多在 Android 内部解析清单时使用此值。我的猜测是它在 android.R.attr 中是作为其他一些元数据声明的副作用,如 a quick casual search of the Android source code did not turn up a match

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 2022-08-11
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        • 1970-01-01
        • 2017-10-10
        相关资源
        最近更新 更多