Android: перечисление кнопок на геймпаде

У меня есть Android-устройство, к которому можно подключить геймпад (это полностью стандартный контроллер XBox 360, но мне нужно поддерживать и другие варианты). Геймпад отображается как InputDevice с некоторыми аналоговыми осями и некоторыми кнопками.

Мне нужно уметь запрашивать Android, чтобы узнать, какие кнопки поддерживает геймпад. Кто-нибудь знает как это сделать?

Я знаю, что система имеет эту информацию, потому что, если я напишу приложение командной строки, которое открывается /dev/input/event... и запрашивает кнопки, используя EVIOCGBIT ioctl, я получаю хороший список поддерживаемых кнопок из ядра. Но я не могу сделать это из приложения Android, потому что у меня нет прав доступа к устройствам ввода напрямую.

Похоже, что можно получить объект KeyCharacterMap объекта InputDevice и запросить его; но похоже, что Android прикрепил раскладку клавиатуры QWERTY по умолчанию к геймпаду, а не строил тот, который фактически соответствует тому, что поддерживает геймпад. Это с радостью скажет мне, что на геймпаде есть клавиша Q, которой нет, и что у него нет клавиши BUTTON_X, которая у него есть, и для которой я получаю ключевые события. Так что это не помогает.

Есть какой-либо способ сделать это?

1 ответ

Я еще не нашел пути, но нашел ужасный обходной путь.

Если вы позвоните KeyCharacterMap.deviceHasKey(keycode)Я могу спросить Android, если какое-либо устройство ввода в системе поддерживает указанный код ключа. Перебирая все возможные кнопки, которые могут появляться на геймпаде (полезно, чтобы все они назывались KeyEvent.KEYCODE_BUTTON_something), Я могу понять, что любой подключенный геймпад должен поддерживать хотя бы некоторые из этих кнопок.

Это не очень хорошее решение - если у меня одновременно подключены контроллер XBox 360 и Wiimote, то я не могу понять, что на контроллере XBox нет кнопок 1 или 2, а на Wiimote нет X или Y, например. Но, по крайней мере, это начало.

Если у кого-то есть идеи получше, предложите...

Другие вопросы по тегам