2013-10-09 2 views
0

InputDevice .getSources() 메소드를 사용하여 InputDevice의 유형 (소스)을 결정해야합니다. 그러나 미리 정해진 정수를 반환하는 대신 결합 된 비트 필드를 반환합니다 (예 : 16786707). 이것은 내 게임 패드의 실제 값입니다.android에서 입력 장치의 소스가 무엇인지 어떻게 결정합니까?

16786707은 즉시 생성되므로 InputDevice 문서 페이지에 나열되어 있지 않습니다. InputDevice가 SOURCE_CLASS_JOYSTICK (16)인지 SOURCE_GAMEPAD (1025)인지 SOURCE_JOYSTICK (16777232)인지 확인하려면 16786707 번을 파싱하려면 어떻게합니까? 내 목표는 초기화 방법에서 InputDevice가 Xbox 360 게임 패드 또는 다른 게임 패드와 같은 게임 패드인지 확인하는 것입니다.

답변

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

이 장치는 GamePad, 조이스틱 및 class_joystick입니다 (조이스틱을 의미 함).

당신이 사용하고 무엇을 확인해야합니다 :

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); 

이 작동합니다.

편집 : 키보드와 마우스로도 확인했습니다.