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

Android InputManager会自动从列表中删除无线控制器,android,joystick,Android,Joystick,由于安卓设备上的InputManager,我正在尝试处理ps4控制器 控制器通过蓝牙连接到内置android界面的智能手机。连接时,将调用InputDeviceListener,日志将显示onInputDeviceAdded:Wireless Controller,这对于以下代码来说是正常的。但是,在大约5秒钟之后,onInputDeviceRemoved会因为任何原因被调用!这意味着控制器已从设备列表中删除,并阻止智能手机接收任何KeyEvent 控制器似乎仅从InputManager列表中删

由于安卓设备上的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);
    }
}

有没有办法知道是什么导致了这种情况并加以避免?

实际上代码是有效的。我用蓝牙键盘试过,效果很好。 问题似乎来自智能手机/Android版本,该版本不支持通过蓝牙的ps4控制器(我目前使用的是华为p8 lite 2017,Android 8.0.0)。 因此,我找到的解决方案是用OTG电缆将两者连接起来