gpt4 book ai didi

android - 使用 Java 反射与检查 Build.VERSION.SDK_INT

转载 作者:行者123 更新时间:2023-11-29 14:04:50 24 4
gpt4 key购买 nike

我为什么要像讨论的那样费心使用反射 here ,是否可以简单地从 Build.VERSION.SDK_INT 测试 Android 版本并有条件地运行低 API 版本不可用的功能?

那个article讨论了如何获取方法ID,处理异常等,这似乎比简单使用更复杂:

if(Build.VERSION.SDK_INT>=11){
// some Honeycomb code
// example: findViewById(R.id.root).setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
}

此代码适用于各种设备(2.2/3.2/等)。

谢谢

最佳答案

如果隐藏在“//some Honeycomb code”中的代码使用仅存在于 Honeycomb API 中的类或方法名称,则在较旧的 Android 系统上运行时,您的建议将无法工作(没有反射)。问题的根源是在加载类时加载了代码中引用的所有类。您需要使用反射将包含 Honeycomb 引用的代码的解析延迟到运行时。

具体来说,如果你有一个类:

class MyUseOfFeatures {
public void doSomething() {
if (TestIfPhoneHasFancyHoneycombFeature()) {
Object example = android.util.JsonReader(); // JsonReader is new in 3.0
}
}

然后,当 JVM(呃,DVM?)加载此类的字节码时,它将尝试在加载类时(大概是在加载应用程序时)解析 android.util.JsonReader 名称。

如果您只依赖于 Honeycomb 的某些行为(而不是任何新的类、方法或字段),那么您只需测试内部版本号就可以了。

关于android - 使用 Java 反射与检查 Build.VERSION.SDK_INT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7683777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com