我一直在玩android.R.attr.versionName,这是我第一次在this question看到的。这声称显示了该应用程序的版本,但我尝试了一些似乎不起作用的事情:
以TextView格式查看,只显示数字:
<TextView ...
android:text="?android:attr/versionName"/>
以字符串形式获取,返回空指针异常:
TypedValue value=new TypedValue();
getActivity().getTheme().resolveAttribute(android.R.attr.versionName,value,true);
String version=value.coerceToString().toString();
还有其他想法吗?如果没有办法从代码或XML中获取版本,那似乎毫无用处。
我知道还有其他方法可以获取版本名称,我对它们不感兴趣,我只是对这个特定变量感到好奇,以及它的用途是什么。
答案 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"