Ven*_*kat 22 android android-ndk
我编写代码来查找这样的Android版本
String version=Build.VERSION.RELEASE;
Run Code Online (Sandbox Code Playgroud)
通过使用此代码我得到版本号但我想要版本名称.如何获取版本名称?
Kev*_*ant 52
如前所述,反思似乎是这个问题的关键.StringBuilder和额外的格式不是必需的,它仅用于说明用法.
import java.lang.reflect.Field;
...
StringBuilder builder = new StringBuilder();
builder.append("android : ").append(Build.VERSION.RELEASE);
Field[] fields = Build.VERSION_CODES.class.getFields();
for (Field field : fields) {
String fieldName = field.getName();
int fieldValue = -1;
try {
fieldValue = field.getInt(new Object());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
if (fieldValue == Build.VERSION.SDK_INT) {
builder.append(" : ").append(fieldName).append(" : ");
builder.append("sdk=").append(fieldValue);
}
}
Log.d(LOG_TAG, "OS: " + builder.toString());
Run Code Online (Sandbox Code Playgroud)
在我的4.1模拟器上,我得到了这个输出:
D/MainActivity( 1551): OS: android : 4.1.1 : JELLY_BEAN : sdk=16
Run Code Online (Sandbox Code Playgroud)
请享用!
Shy*_*mar 15
优化的代码,这将工作:
import java.lang.reflect.Field;
Field[] fields = Build.VERSION_CODES.class.getFields();
String osName = fields[Build.VERSION.SDK_INT + 1].getName();
Log.d("Android OsName:",osName);
Run Code Online (Sandbox Code Playgroud)
小智 13
经过API 28(安卓派),Build.VERSION_CODES被改变了某些字段。
因此,如果您使用:
Field[] fields = Build.VERSION_CODES.class.getFields();
String osName = fields[Build.VERSION.SDK_INT + 1].getName();
Run Code Online (Sandbox Code Playgroud)
由于超出范围异常,将立即导致您的应用程序崩溃。
所有 API 级别的解决方案是:
Field[] fields = Build.VERSION_CODES.class.getFields();
String codeName = "UNKNOWN";
for (Field field : fields) {
try {
if (field.getInt(Build.VERSION_CODES.class) == Build.VERSION.SDK_INT) {
codeName = field.getName();
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
或者在 Kotlin 中使用 Java 8 的风格:
val fields = Build.VERSION_CODES::class.java.fields
var codeName = "UNKNOWN"
fields.filter { it.getInt(Build.VERSION_CODES::class) == Build.VERSION.SDK_INT }
.forEach { codeName = it.name }
Run Code Online (Sandbox Code Playgroud)
http://developer.android.com/reference/android/os/Build.VERSION_CODES.html包含具有您正在寻找的名称的字段.因此,您可以使用反射来查找哪个字段对应于"版本"值.
你为什么要这个名字?
归档时间: |
|
查看次数: |
41620 次 |
最近记录: |