我开发了一款APP Android,它可以检测设备类型(智能手机正常或游戏手柄)。 我在没有与游戏手柄连接的HTC ONE M7上做过测试。 但是我的代码告诉我它是游戏手柄。
这是我的代码:
InputDevice dev = InputDevice.getDevice(deviceId);
int sources = dev.getSources();
// Verify that the device has gamepad buttons, control sticks, or both.
if (((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) || ((sources & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK))
{
Log.d(TAG, "device detected : Game Pad");
}
对于HTC ONE M7的deviceID = 2,我发现((sources& InputDevice.SOURCE_GAMEPAD)== InputDevice.SOURCE_GAMEPAD)为真。这就是HTC被认为是GamePad的原因。
任何人都知道为什么?
答案 0 :(得分:0)
我找到了解决方案。
我们应该检查这样的GamePad的存在:(&&而不是||)
InputDevice dev = InputDevice.getDevice(deviceId);
int sources = dev.getSources();
// Verify that the device has gamepad buttons, control sticks, or both.
if (((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) && ((sources & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK))
{
Log.d(TAG, "device detected : Game Pad");
}
因为对于一个真正的GamePad,它同时包含InputDevice.SOURCE_GAMEPAD和InputDevice.SOURCE_JOYSTICK。
你可以这样看: How do I determine what is the source of Input Device in android?
感谢。