Оказывается, у событий есть метод getSource()
.
if (((event.getSource() & InputDevice.SOURCE_KEYBOARD) != 0) && event.getDeviceId() > 0)
или
if (event.getDeviceId() > 0 && event.getSource() == InputDevice.SOURCE_KEYBOARD)
Первая версия этого условия от Android API. (event.getSource() & InputDevice.SOURCE_KEYBOARD) != 0)
часть.
Это должно довольно хорошо рассказать вам, если событие было с физической клавиатуры.