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, например. Но, по крайней мере, это начало.
Если у кого-то есть идеи получше, предложите...