android4.0 物理鍵盤與軟鍵盤同時使用修改

用android4.0發現插了掃描槍之後軟鍵盤不出現了,最開始以爲是應用軟件設置有問題,改了下發現不是,上網搜所了幾個說修改

參考:http://blog.csdn.net/DrakeBlue/article/details/39049495

frameworks/base/services/java/com/android/server/wm/WindowManagerService.java

關鍵代碼:行6618 computeScreenConfigurationLocked()方法中

boolean hardKeyboardAvailable = config.keyboard != Configuration.KEYBOARD_NOKEYS;
            if (hardKeyboardAvailable != mHardKeyboardAvailable) {
                mHardKeyboardAvailable = hardKeyboardAvailable;
                mHardKeyboardEnabled = !hardKeyboardAvailable;
                mH.removeMessages(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE);
                mH.sendEmptyMessage(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE);
            }
            if (!mHardKeyboardEnabled) {
                config.keyboard = Configuration.KEYBOARD_NOKEYS;
            }
將mHardKeyboardEnabled直接改成false

這樣改軟鍵盤是能用但是物理鍵盤是用不了的

還是要自己跟蹤代碼

frameworks/base/core/java/android/inputmethodservice/InputMethodService.java中

onConfigurationChanged方法最後幾行代碼

<span style="font-size:18px;">// If user uses hard keyboard, IME button should always be shown.
            boolean showing = onEvaluateInputViewShown();
            mImm.setImeWindowStatus(mToken, IME_ACTIVE | (showing ? IME_VISIBLE : 0),
                    mBackDisposition);</span>
我估計這裏就是隱藏軟鍵盤的地方 接着找onEvaluateInputViewShown方法

    public boolean onEvaluateInputViewShown() {
        Configuration config = getResources().getConfiguration();
        return config.keyboard == Configuration.KEYBOARD_NOKEYS
                || config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES;
    }
直接將這個返回值改成true發現軟鍵盤與物理鍵盤能同時使用 想了下怕有問題 還是接着往下找

frameworks/base/service/input/InputReader.cpp中函數

void InputReader::updateInputConfigurationLocked()

中有這樣幾行代碼:

        if ((sources & AINPUT_SOURCE_TOUCHSCREEN) == AINPUT_SOURCE_TOUCHSCREEN) {
            touchScreenConfig = InputConfiguration::TOUCHSCREEN_FINGER;
        }
        if ((sources & AINPUT_SOURCE_TRACKBALL) == AINPUT_SOURCE_TRACKBALL) {
            navigationConfig = InputConfiguration::NAVIGATION_TRACKBALL;
        } else if ((sources & AINPUT_SOURCE_DPAD) == AINPUT_SOURCE_DPAD) {
            navigationConfig = InputConfiguration::NAVIGATION_DPAD;
        }
        if (deviceInfo.getKeyboardType() == AINPUT_KEYBOARD_TYPE_ALPHABETIC) {
            keyboardConfig = InputConfiguration::KEYBOARD_QWERTY;
        }
直接將最後一個修改如下

        if (deviceInfo.getKeyboardType() == AINPUT_KEYBOARD_TYPE_ALPHABETIC) {
            //keyboardConfig = InputConfiguration::KEYBOARD_QWERTY;//modify by hclydao
        }
直接註釋掉

經初步測試軟鍵盤與硬鍵盤能同時使用,不知道這樣修改會不會有問題.




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章