Я хочу проверить, используется ли встроенная / аппаратная клавиатура
Вы можете использовать объект Configuration
, чтобы проверить, не скрыта ли аппаратная клавиатура устройства. Обычно это подразумевает, что они используют эту клавиатуру, поскольку большинство устройств не показывают IME, когда аппаратная клавиатура доступна. Однако некоторые устройства могут поддерживать оба одновременно, и я не знаю, как внешние клавиатуры (USB, Bluetooth) взаимодействуют с этим значением.
также, если возможно, я хочу отключить сторонние клавиатуры.
К счастью, это невозможно.
есть ли решение этой проблемы?
Нет вопросов, упомянутых в этом пункте в вопросе.
да, они не будут счастливы, но они будут гораздо несчастнее, если вы позволите их защищенным данным испортиться
Если пользователи предпочитают использовать альтернативную клавиатуру, это их выбор в качестве пользователей. Пользователь вполне способен переключать клавиатуры, если они пожелают. Пользователь вполне способен принимать эти решения. Вполне возможно, что альтернативная клавиатура защищена на больше , чем встроенная, из-за устройств, загруженных шпионским ПО с таким фактором, как CarrierIQ . Следовательно, ваше предположение о том, что вы повышаете безопасность, атакуя выбранную пользователем клавиатуру, в корне неверно.
Конечно, вам вообще не нужно поддерживать использование какой-либо клавиатуры, что заставляет пользователей использовать какую-то опцию ввода на экране, которую вы сами придумаете. Это также не является полностью безопасным (например, атаки с использованием кражи), и это может вызвать проблемы с удобством использования для людей, которые по определенным причинам выбрали определенные сторонние клавиатуры (например, слепые пользователи, пользователи с проблемами управления двигателем).
Мне не известно, что существует способ окончательно определить, какой IME встроенного программного обеспечения является, особенно если это зависит от устройства и встроенного программного обеспечения.