You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:55:06