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

Android端如何检测游戏控制器连接状态?(React Native/Expo场景)

Android游戏控制器连接/断开事件的替代实现方案
  • 用BroadcastReceiver监听系统广播
    Android系统会在USB或蓝牙设备连接、断开时发送对应广播,你可以注册BroadcastReceiver来捕获:

    • USB设备:监听android.hardware.usb.action.USB_DEVICE_ATTACHED和android.hardware.usb.action.USB_DEVICE_DETACHED,需要在AndroidManifest里声明权限和设备过滤规则(针对特定USB控制器)。
    • 蓝牙设备:监听android.bluetooth.device.action.ACL_CONNECTED和android.bluetooth.device.action.ACL_DISCONNECTED,注意要申请BLUETOOTH和BLUETOOTH_ADMIN权限(Android 12+权限有调整,需适配)。
      收到广播后,调用getSources()或InputManager.getInputDevice()拿到设备信息,判断是不是游戏控制器即可。
  • 注册InputManager的设备监听回调(Android 4.1+)
    从API 16开始,InputManager提供了registerInputDeviceListener方法,能监听输入设备的添加、移除和配置变化,不用手动轮询:

InputManager inputManager = (InputManager) getSystemService(Context.INPUT_SERVICE);
inputManager.registerInputDeviceListener(new InputManager.InputDeviceListener() {
    @Override
    public void onInputDeviceAdded(int deviceId) {
        InputDevice device = inputManager.getInputDevice(deviceId);
        if (isGameController(device)) {
            // 把连接事件发送到JS层
        }
    }

    @Override
    public void onInputDeviceRemoved(int deviceId) {
        // 把断开事件发送到JS层
    }

    @Override
    public void onInputDeviceChanged(int deviceId) {
        // 可选处理设备配置变更
    }
}, null);

这是系统主动触发的回调,比定时轮询高效很多,完美对齐iOS的通知逻辑。

  • 适配Expo Modules生命周期
    在Expo模块的onCreate或onAttach方法里注册监听,onDestroy或onDetach时注销,防止内存泄漏。然后通过Expo的EventEmitter把原生事件传递到React Native端,让JS层能像监听iOS事件一样处理控制器连接/断开。

内容的提问来源于stack exchange,提问作者Mehrdad Moradi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:13:19