2012-07-27 2 views
5

게임 패드를 연결할 수있는 안드로이드 장치가 있습니다 (완전히 표준 XBox 360 컨트롤러이지만 다른 종류도 지원해야합니다). 게임 패드는 일부 아날로그 축과 일부 버튼이있는 InputDevice로 표시됩니다.Android : 게임 패드의 버튼 열거하기

Android를 쿼리하여 게임 패드에서 지원하는 버튼을 찾을 수 있어야합니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?

/dev/input/event...을 열고 EVIOCGBIT ioctl을 사용하여 단추를 쿼리하는 명령 줄 응용 프로그램을 작성하면 커널에서 지원되는 단추 목록을 얻을 수 있기 때문에 시스템에이 정보가 있다는 것을 알고 있습니다. 하지만 입력 장치에 직접 액세스 할 수있는 권한이 없기 때문에 Android 애플리케이션에서이 작업을 수행 할 수 없습니다.

InputDevice의 KeyCharacterMap 개체를 가져 와서 쿼리 할 수 ​​있어야합니다. 안드로이드가 게임 패드가 지원하는 것과 실제로 일치하는 키보드 키 맵을 구성하는 대신에 기본 QWERTY 키보드 키맵을 게임 패드에 연결 한 것처럼 보입니다. 이것은 게임 패드에 Q 키가 있다는 것을 기쁜 마음으로 알려줄 것입니다. Q 키는없고, BUTTON_X 키는 없으며 키 이벤트를 받고 있습니다. 그래서 그것은 도움이되지 않습니다.

이렇게 할 방법이 있습니까?

+0

공급 업체의 설명서가 있어야합니다. 어떤 장치를 사용하고 있습니까? –

+0

Any ---이 방법은 휴대용 솔루션이어야합니다. –

답변

1

아직 방법을 찾지 못했지만 끔찍한 해결 방법을 발견했습니다.

KeyCharacterMap.deviceHasKey(keycode)으로 전화하면 입력 장치가 지정된 키 코드를 지원하는 경우 Android에게 문의 할 수 있습니다. 게임 패드에서 발생할 수있는 모든 가능한 버튼을 반복하여 (유용하게도 그들은 모두 KeyEvent.KEYCODE_BUTTON_something라고 부름) 연결된 게임 패드가 최소한 버튼을 지원해야한다는 것을 알 수 있습니다.

그것은 아주 좋은 해결책이 아닙니다. XBox 360 컨트롤러와 Wiimote를 동시에 연결하면 XBox 컨트롤러에 버튼 1 또는 2가없는 것을 알 수 없습니다. 예를 들어 Wiimote에는 X 또는 Y가 없습니다. 그러나 적어도 그것은 시작입니다.

누구든지 더 좋은 아이디어가 있다면 ...

+1

마지막으로 InputDevice.hasKeys를 사용하여 API 레벨 19 (4.4)에 추가 한 것 같습니다 : http://developer.android.com/reference/android/view/InputDevice.html#hasKeys%28int...%29 –