Kotlin中调用Java静态方法Sensor.getMaxLengthValuesArray失败怎么办?
问题解决方法
核心原因说明
- 第一,方法API级别限制:
Sensor.getMaxLengthValuesArray()是Android 12(API级别31)才新增的系统API,只要满足以下任意一种情况就会调用失败:- 项目
build.gradle中配置的compileSdk低于31,编译阶段就无法识别该静态方法 - 运行代码的WearOS设备系统版本低于Android 12,运行阶段找不到对应方法
- 项目
- 第二,Kotlin空安全校验问题:你声明的
mSensor是可空类型Sensor?,而该静态方法要求第一个入参为非空的Sensor实例,直接传可空变量会触发Kotlin编译报错。
修复方案
- 先调整项目编译配置,将
compileSdk升级到31或更高版本,确保编译阶段可以识别该API - 代码中新增版本判断和非空校验逻辑,参考写法如下:
import android.os.Build import android.os.Build.VERSION_CODES // ... 其余原有导入和类代码不变 fun myCode() { // 仅当运行设备系统版本≥API 31时执行该方法 if (Build.VERSION.SDK_INT >= VERSION_CODES.S) { // 先校验mSensor非空再传入 mSensor?.let { validSensor -> val num = Sensor.getMaxLengthValuesArray(validSensor, Build.VERSION.SDK_INT) // 此处补充后续业务逻辑即可 } } else { // 此处补充低版本系统的兼容逻辑 } }
- 如果是Release包运行异常,检查混淆配置文件,不要对
android.hardware.Sensor类的公共方法做混淆裁剪。
内容的提问来源于stack exchange,提问作者이준학
相关产品推荐
相关产品推荐

