Android OnConfigurationChanged не вызывается, когда я подключаю или отключаю USB-клавиатуру

Это мой onConfigurationChanged:

 @Override
public void onConfigurationChanged(Configuration newConfig) { //this will change the language, if needed.
    super.onConfigurationChanged(newConfig);

    Log.i("onConfigurationChanged", "keyboard: " + getResources().getConfiguration().keyboard);

    if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
        //A hardware keyboard is being connected
        Log.i("onConfigurationChanged", "HARDKEYBOARDHIDDEN_NO");

    } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
        //A hardware keyboard is being disconnected
        Log.i("onConfigurationChanged", "HARDKEYBOARDHIDDEN_YES");

    }

    Utils.setLocale(getBaseContext(), newConfig);
}

И это моя деятельность:

  <activity
        android:name="com.vidyo.vidyomod.activities.VMBaseActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:label="@string/app_name"
        android:launchMode="singleInstance"
        android:screenOrientation="landscape"
        android:windowSoftInputMode="adjustResize">
    </activity>

Почему тогда не вызывается onConfigurationChanged? когда я подключаю / отключаю клавиатуру? Потому что я установил configChanges, мне нужно найти способ узнать, подключена ли USB-клавиатура или нет.

PS: getActivity (). GetResources(). GetConfiguration(). HardKeyboardHidden возвращает 2 => HARDKEYBOARDHIDDEN_YES, даже если моя USB-клавиатура подключена. Зачем?

РЕДАКТИРОВАТЬ: Даже если onConfigurationChanged не вызывается: я получаю эти журналы:

07-12 07:40:41.749: D/EventHub(997): No input device configuration file found for device 'LITEON Technology USB Multimedia Keyboard'.
07-12 07:40:41.759: I/EventHub(997): New device: id=11, fd=195, path='/dev/input/event7', name='LITEON Technology USB Multimedia Keyboard', classes=0x80000403, configuration='', keyLayout='/system/usr/keylayout/Generic.kl', keyCharacterMap='/system/usr/keychars/Generic.kcm', builtinKeyboard=false, usingSuspendBlockIoctl=true, usingClockIoctl=true
07-12 07:40:41.759: I/InputReader(997): Device added: id=11, name='LITEON Technology USB Multimedia Keyboard', sources=0x00002103

Не могу ли я взять это откуда-то? как слушатель событий на EventHub или что-то?

1 ответ

У меня была похожая проблема с блютуз клавиатурой Samsung для Samsung Tab S2.

мой onConfigurationChanged() Метод не сработал, пока я не вставил эту строку в манифест.

android:configChanges="keyboard|keyboardHidden|orientation|screenSize|navigation" 

Единственная документация, которую я смог найти, была здесь.

navigation Ключевое слово относится к тачпаду, который есть у большинства физических устройств, а у большинства программных клавиатур нет.

Чтобы процитировать документ: тип навигации (трекбол /dpad) изменился. (Это никогда не должно происходить обычно.)

Прекрасный пример плохой документации для Android, такой же дорогой, как и плохой код!

Другие вопросы по тегам