我必须使用InputDevice .getSources()方法来确定InputDevice的类型(源)。但是,它没有返回预定的整数,而是返回一个组合的位域,例如:16786707(这是我的游戏手柄的实际值)。

如您所见,InputDevice文档页面未列出16786707,因为它是即时生成的。如何解析数字16786707以确定InputDevice是:SOURCE_CLASS_JOYSTICK(16)还是SOURCE_GAMEPAD(1025)或SOURCE_JOYSTICK(16777232)。我的目标是在一种初始化方法中确定InputDevice是像Xbox 360游戏手柄还是任何其他游戏手柄之类的游戏手柄。

最佳答案

                bytes          int        name
-------------------------------------------------------------
1000000000010010100010011  //16786707 <- Device
                    10000  //16       <- SOURCE_CLASS_JOYSTICK
              10000000001  //1025     <- SOURCE_GAMEPAD
1000000000000000000010000  //16777232 <- SOURCE_JOYSTICK


该设备是GamePad,操纵杆和class_joystick(猜测为操纵杆)。

您需要使用AND检查以下内容:

int device = 16786707;
boolean is_source_class_joystick = ((device & SOURCE_CLASS_JOYSTICK) == SOURCE_CLASS_JOYSTICK);
boolean is_source_gamepad = ((device & SOURCE_GAMEPAD) == SOURCE_GAMEPAD);
boolean is_source_joystick = ((device & SOURCE_JOYSTICK) == SOURCE_JOYSTICK);


这应该工作。

编辑:我也检查过,它也可以被认为是键盘和鼠标。

10-08 03:09