Запрос непрерывных данных джойстика

#java #android #joystick #gamepad

#java #Android #Джойстик #Геймпад

Вопрос:

У меня есть Bluetooth-геймпад, подключенный к моему Android-устройству, и он хорошо подключен и передает. Единственный способ получить данные с джойстика, по-видимому, заключается в том, чтобы использовать либо onGenericMotionEvent или dispatchGenericMotionEvent
Из документов, на onGenericMotionEvent :

Общие события движения описывают движения джойстика, наведение курсора мыши, касания трекпада, движения колесика прокрутки и другие события ввода.

Я проверил источник моего ввода и убедился, что источник указан правильно, спецификации контроллера и т.д. Однако единственный ввод, который я получаю, — это чистый -1.0, 0.0 или 1.0 с моего джойстика, который действительно находится внутри MotionRange указанного. Он никогда не возвращает промежуточное значение.
Кроме того, я был обеспокоен пакетированием (из документов).:

Для повышения эффективности события движения с помощью ACTION_MOVE могут объединять несколько выборок движения в одном объекте.

Означает ли это, что я никогда не смогу получить прямую и немедленную обратную связь со своими джойстиками? Тем не менее, я проверил исторические значения, но MotionEvent#getHistorySize вернул 0 для каждого аналогового входа. (Кстати, события кнопок работают нормально)

Является ли это проблемой с контроллером, пакетной обработкой, обработкой событий или чем-то еще? Если невозможно избежать пакетной обработки, могу ли я настроить отдельный поток для непрерывного сбора этой информации?

Для наглядности я использую Nintendo JoyCon (R), подключенный по Bluetooth и API уровня 30.

Ответ №1:

После дальнейших исследований выясняется, что джойстики JoyCon просто передают данные, как если бы они были кнопками D-pad, AXIS_HAT_X и AXIS_HAT_Y только. Я попытался подключить другие контроллеры, и они функционировали так, как ожидалось.

Определенно существует задержка ввода, в зависимости от используемого контроллера, но отправляемые данные относительно непрерывны. Похоже, что если система событий получает много изменений в данных джойстика, она может отображать 1 историческую точку, но в большинстве случаев этого не происходит. Вывод журнала консоли
Поэтому в большинстве случаев пакетирование не должно быть проблемой.

Что касается минусов Joy, если это звучит как внутреннее ограничение, а не то, что я могу обойти.
Я не уверен, есть ли способ обойти это, но это объясняет проблемы, с которыми я столкнулся.