InputManager 自动从列表中删除无线控制器

InputManager automatically removes Wireless Controller from list

由于 Android 设备上的 InputManager,我正在尝试处理 ps4 控制器。

控制器通过蓝牙连接到具有内置 android 接口的智能手机。连接时,将调用 InputDeviceListener 并且日志显示 onInputDeviceAdded: Wireless Controller 这对于以下代码是正常的。但是,在大约 5 秒之后,onInputDeviceRemoved 出于某种原因被调用了!这意味着控制器已从设备列表中删除并阻止智能手机接收任何 KeyEvent.

控制器似乎只是从 InputManager 列表中删除,因为它仍与智能手机配对。

这是我的代码:

public class activity_test extends AppCompatActivity {

    private static final String TAG = activity_test.class.getSimpleName();

    private InputManager mInputManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        mInputManager = (InputManager)getSystemService(Context.INPUT_SERVICE);

        int[] ids = mInputManager.getInputDeviceIds();

        mInputManager.registerInputDeviceListener(new InputManager.InputDeviceListener() {
            @Override
            public void onInputDeviceAdded(int i) {
                Log.d(TAG, "onInputDeviceAdded: "+mInputManager.getInputDevice(i));
            }

            @Override
            public void onInputDeviceRemoved(int i) {
                Log.d(TAG, "onInputDeviceRemoved: "+mInputManager.getInputDevice(i));
            }

            @Override
            public void onInputDeviceChanged(int i) {
                Log.d(TAG, "onInputDeviceChanged: "+mInputManager.getInputDevice(i));
            }
        }, null);
    }
}

有没有办法知道是什么原因造成的并避免它?

实际上代码有效。我用蓝牙键盘试了一下,效果很好。 看起来问题出在不支持 ps4 控制器通过蓝牙的 smartphone/Android 版本(我目前使用的是 Huawei p8 lite 2017,Android 8.0.0)。 所以我找到的解决方案是用 OTG 电缆连接两者。