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

时间:2014-02-08 20:25:50

标签: android attr

我一直在玩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();
    
  3. 还有其他想法吗?如果没有办法从代码或XML中获取版本,那似乎毫无用处。

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

3 个答案:

答案 0 :(得分:2)

  

但我尝试了一些似乎不起作用的事情

我不希望这两者中的任何一个起作用。 View不是清单文件。布局不是清单文件。

  

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

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

答案 1 :(得分:0)

下面是一个可以使用的简单类。它被编码为处理Android SDK 28中已弃用的packageInfo.versionCode,并抑制了弃用棉绒错误。

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 :(得分:-1)

试试这个:

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

或正如您在you have linked页面上看到的那样:

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

相关问题