Ответ 1
Да, вы можете.
Извлеките Configuration с помощью
Configuration config = getResources().getConfiguration();
... и затем просмотрите поле keyboard
.
Если значение keyboard
не KEYBOARD_NOKEYS, пользователь имеет аппаратную клавиатуру.
Обратите внимание, что как @Carl в своем комментарии ниже пользователь может подключить USB-клавиатуру в любой момент, пока ваше приложение работает, вызывая значение keyboard
изменить.