У меня есть родное приложение C ++ для Android.
Я использую AINPUT_SOURCE
перечисления для фильтрации входных событий, когда они входят в мою родную деятельность. Пока я забочусь только о AINPUT_SOURCE_TOUCHSCREEN (0x1002)
,
Похоже, что это работает на 99% устройств, однако Motorola Moto G6 Plus не соответствует этому стандарту.
G6 сообщает источник входного сигнала как 0x5002. Независимо от того, сколько раз вы касаетесь сенсорного экрана, устройство никогда не отправит фактическое событие ввода с сенсорного экрана.
Я смог обнаружить это, купив один сам, после нескольких месяцев, когда пользователи G6 сообщили, что не могут играть в мою игру.
Официальный справочный сайт Android NDK даже не имеет источника входного сигнала в списке со значением (0x5002).
Я осмотрелся вокруг, и, похоже, не было никаких дискуссий по этому вопросу.
Существуют ли другие типы AINPUT_SOURCE, о которых мне следует знать? Те, которые не указаны в справочнике NDK.
Я хотел бы иметь возможность продолжать использовать эти флаги, чтобы отделить мой код сенсорного ввода от клавиатуры, мыши, кнопок контроллера и т. Д.
Спасибо!
Android NDK входные ссылки:
Это ENUM, поэтому вы должны рассчитать их следующим образом: 5002 состоит из 0x02 + 0x1000 + 0x4000 = сенсорный экран + стилус + кнопка. Кажется, что устройство имеет стилус и кнопку, поэтому вы получите события для всех этих трех вещей. Чтобы проверить, поддерживает ли устройство TOUCHSCREEN, вам просто нужно выполнить «found_flag» & 0x1000 == 0x1000 «, и если эта проверка выдает значение TRUE, тогда это устройство поддерживает обычное поведение touscreen.
Других решений пока нет …