Codenameone 如何在本机界面中获得Android设备当前SDK级别

Codenameone 如何在本机界面中获得Android设备当前SDK级别,codenameone,Codenameone,我有一个本机接口,有两个原因需要设备的SDK级别。第一个是一些方法已被弃用,因此我需要确定设备是否有足够高的版本来支持新API,第二个是SDK级别23需要新权限,但在具有 我尝试过下面这样的陈述,但我认为它不起作用: if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) 我也尝试了上面的方法,只使用表示级别的整数,例如18表示JELLY\u BEAN\u MR2。这个有

我有一个本机接口,有两个原因需要设备的SDK级别。第一个是一些方法已被弃用,因此我需要确定设备是否有足够高的版本来支持新API,第二个是SDK级别23需要新权限,但在具有 我尝试过下面这样的陈述,但我认为它不起作用:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2)
我也尝试了上面的方法,只使用表示级别的整数,例如18表示JELLY\u BEAN\u MR2。这个有AndroidNativeUtil吗?我找不到任何关于AndroidNativeUtil中的类的文档


我认为它不起作用的原因是,当我添加这些语句来控制使用哪个API时,应用程序在具有较高API级别的较新设备上正常工作,但在具有较旧API级别的设备上挂起。我假设它总是认为API>18。

字符串
Build.VERSION.RELEASE
将为您提供用户可见的版本字符串(即1.5、1.6、2.0),而
Build.VERSION.SDK\u INT
将从
Build.VERSION\u code
中为您提供一个值,如果您希望以编程方式与之进行比较,则最好使用该值

请注意,
Build.VERSION.SDK\u INT
仅在Android 1.6及更高版本上可用
Build.VERSION.SDK
将适用于所有Android版本,包括1.5版。然而,一旦您选择放弃1.5支持,切换到
SDK\u INT
是一个好主意

编辑:


我尝试了SDK_INT并将其与21进行了比较,但结果没有改变。我必须设置一个祝酒词或其他什么的,这样我才能得到结果。这应该行得通,我猜绞刑的原因是不同的。本周五,我们改进了对旧设备上位置API的支持,因此这可能与该问题有关。如果没有,请尝试将旧设备与DDMS连接并查看日志。我编写了一个简单的测试用例,在一个使用本机接口的对话框中显示Build.VERSION.SDK_INT调用的结果,它按预期工作,返回API级别的整数值。问题一定出在我的其他代码上。
StringBuffer buf = new StringBuffer();

buf.append("VERSION.RELEASE {"+Build.VERSION.RELEASE+"}");
buf.append("\\nVERSION.INCREMENTAL {"+Build.VERSION.INCREMENTAL+"}");
buf.append("\\nVERSION.SDK {"+Build.VERSION.SDK+"}");
buf.append("\\nBOARD {"+Build.BOARD+"}");
buf.append("\\nBRAND {"+Build.BRAND+"}");
buf.append("\\nDEVICE {"+Build.DEVICE+"}");
buf.append("\\nFINGERPRINT {"+Build.FINGERPRINT+"}");
buf.append("\\nHOST {"+Build.HOST+"}");
buf.append("\\nID {"+Build.ID+"}");

Log.d("build",buf.toString());