当我插入或拔掉USB键盘时,没有调用Android OnConfigurationChanged

时间:2017-07-12 12:03:19

标签: android keyboard usb soft-keyboard onconfigurationchanged

这是我的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 =&gt; 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 个答案:

答案 0 :(得分:2)

三星蓝牙键盘的三星蓝牙键盘出现了类似的问题。

在我将此行放入清单之前,我的onConfigurationChanged()方法没有触发。

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

我能找到的唯一文件是here

navigation关键字指的是大多数物理设备所具有的触控板,以及大多数软键盘所没有的触控板。

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

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