Android,调用 API 14 方法,但应与 API 4 保持兼容

Posted

技术标签:

【中文标题】Android,调用 API 14 方法,但应与 API 4 保持兼容【英文标题】:Android, Call API 14 method but should stay compatible with API 4 【发布时间】:2012-05-13 23:42:23 【问题描述】:

如果设备正在运行 ICS,我想隐藏状态栏:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);

View.SYSTEM_UI_FLAG_LOW_PROFILE 参数是在 android API 14 中定义的。

我的清单现在是:

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14" />

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >

然后它崩溃了:

java.lang.NoSuchMethodError: android.view.View.setSystemUiVisibility

如何调用此方法并使其与 API 级别较低的 Android 设备兼容?

【问题讨论】:

请查看以下链接:***.com/questions/8273186/… 和 ***.com/questions/5431365/… 检查 api 级别并仅在 api >= 14 并且在较低的 api 请求全屏时调用该方法。支持 api 4 真的没有必要恕我直言 感谢 WarrenFaith,没想到这一点。 [Build.VERSION.SDK_INT > 11] 效果很好! 请注意,它在 Android 2.0 及更高版本上“效果很好”。在 Android 1.x 上,您需要做更多的事情来避免VerifyError 大声笑,是的。但是 minSdkVersion 是 4 ;-) 【参考方案1】:

您可以通过使用获取版本

int SDK_INT = android.os.Build.VERSION.SDK_INT;

你可以在设置参数之前检查版本

if(SDK_INT >= 11 && SDK_INT < 14) 
        getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
    else if(SDK_INT >= 14)
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
    

【讨论】:

View.STATUS_BAR_HIDDEN 是 API 11。您仍然会在 API 10 及更低版本上崩溃 最好的做法是 import static android.os.Build.VERSION.SDK_INT;而不是 int SDK_INT = android.os.Build.VERSION.SDK_INT; 如何避免java.lang.NoSuchMethodError: android.view.View.setSystemUiVisibility?您仍在使用此方法在没有此方法的 API 级别上加载代码。同样的字段STATUS_BAR_HIDDEN 如果您愿意,也可以使用 Build.VERSION_CODES 代替硬编码的 SDK 整数。

以上是关于Android,调用 API 14 方法,但应与 API 4 保持兼容的主要内容,如果未能解决你的问题,请参考以下文章

Android SVG动画PathView源代码解析与使用教程(API 14)

有一个不应硬编码但应在规则调用时作为参数传递的参数[重复]

更新文档时出现 XMLHttpRequest 错误,但应启用 CORS

哪个图形 API 应与 Azure AD B2C 一起使用

黑马Android(14)webservice概念/调用/wsdl接口

为啥在 Android 的 Geoloqi API 中不调用 onPushMessageReceived()?