如何在Android应用中获取游戏手柄电池电量?解决BatteryState类型转换问题
解决Android 13+游戏手柄电池状态获取的类型转换错误
你的代码报错是因为InputDevice.getBatteryState()返回的是BatteryState对象,不是浮点数值,直接赋值给float变量自然会触发类型不兼容错误。要正确获取电池容量,需要先拿到BatteryState实例,再调用它的getCapacity()方法——这个方法会返回0.0到1.0之间的浮点值,代表当前电池剩余的比例。
另外要注意:不是所有蓝牙手柄都支持电池状态上报,所以必须先判断BatteryState是否为null,避免空指针异常。
修正后的代码如下:
private int getBatteryLevel() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { int[] deviceIds = InputDevice.getDeviceIds(); for (int deviceId : deviceIds) { InputDevice inputDevice = InputDevice.getDevice(deviceId); if (inputDevice != null && (inputDevice.getSources() & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) { BatteryState batteryState = inputDevice.getBatteryState(); if (batteryState != null) { // getCapacity()返回0.0-1.0的浮点值,转成百分比 float capacity = batteryState.getCapacity(); return (int) (capacity * 100); } } } } return -1; // 无法获取电池状态时返回-1 }
关键说明
- 先通过
getBatteryState()获取BatteryState对象,必须判空 - 调用
batteryState.getCapacity()得到电池剩余比例,再乘以100转成百分比整数 - 若手柄不支持电池状态上报,或者API版本低于33,返回-1作为标记值
内容的提问来源于stack exchange,提问作者portsample
相关产品推荐
相关产品推荐

