【问题标题】:Android OnConfigurationChanged not being called when I plug or unplug usb keyboard插入或拔出 USB 键盘时未调用 Android OnConfigurationChanged
【发布时间】:2017-12-16 20:28:38
【问题描述】:

这是我的 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 => HARDKEYBOARDHHIDDEN_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 上的事件监听器之类的?

【问题讨论】:

  • 哎呀!抱歉之前的评论我错误地理解了这个问题。
  • 试试把keyboard|screenSize这些属性去掉再试试吧。
  • 最重要的写super.onConfigurationChanged(newConfig);在 onConfigurationChanged() 标记的末尾。做你所有的事情然后调用超级方法。
  • 我删除了键盘|screenSize,但没有任何反应。现在将尝试第二次修复
  • 不,这也不起作用,仍然没有被调用

标签: android keyboard usb soft-keyboard onconfigurationchanged


【解决方案1】:

我在使用三星 Tab S2 的三星蓝牙键盘时遇到了类似的问题。

我的 onConfigurationChanged() 方法直到我将此行放入清单中才触发。

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

我能找到的唯一文档是here

navigation 关键字指的是触摸板,大多数物理设备都有,而大多数软键盘没有。

引用文档:导航类型(轨迹球/dpad)已更改。 (这通常不会发生。)

糟糕的 android 文档与糟糕的代码一样昂贵的一个很好的例子!

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 2013-02-16
    • 2013-05-30
    • 1970-01-01
    • 2011-09-21
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    相关资源
    最近更新 更多