【问题标题】:How can I get an Android device current SDK level in a native interface如何在本机界面中获取 Android 设备当前 SDK 级别
【发布时间】:2016-06-26 14:54:16
【问题描述】:

我有一个本机接口,有两个原因我需要设备的 SDK 级别。第一个是某些方法已被弃用,因此我需要确定设备是否有足够高的版本来支持新 API,第二个是 SDK 级别 23 需要新权限,但在设备上添加了该权限

我尝试过下面这样的语句,但我认为它不起作用:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2)

我也尝试过上面的方法,只使用表示级别的整数,例如 JELLY_BEAN_MR2 的 18。是否有一个 AndroidNativeUtil 呢?我找不到任何关于 AndroidNativeUtil 中的类的文档。

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

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    字符串 Build.VERSION.RELEASE 将为您提供用户可见的版本字符串(即 1.5、1.6、2.0),而 Build.VERSION.SDK_INT 将为您提供来自 Build.VERSION_CODES 的值,如果您想比较,最好使用它以编程方式反对它。

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

    编辑:

    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()); 
    

    【讨论】:

    • 我已经尝试过 SDK_INT 并将其与 21 进行比较,但结果没有改变。我必须设置一个 Toast 消息或其他东西,这样我才能得到结果。
    • 这应该可行,我猜挂起的原因不同。本周五,我们改进了对旧设备上位置 API 的支持,因此这可能与该问题有关。如果没有,请尝试将旧设备与 DDMS 连接并查看日志。
    • 我编写了一个简单的测试用例,使用原生接口在对话框中显示 Build.VERSION.SDK_INT 调用的结果,它按预期工作,返回 API 级别的整数值。问题一定出在我的其他代码上。
    猜你喜欢
    • 2012-09-13
    • 2013-03-15
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多