English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
1. Добавление广播 для пользовательских клавиш
Редактировать метод interceptKeyBeforeDispatching в PhoneWindowManager.java
/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@Override public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) { final boolean keyguardOn = keyguardOn(); final int keyCode = event.getKeyCode(); final int repeatCount = event.getRepeatCount(); final int metaState = event.getMetaState(); final int flags = event.getFlags(); final boolean down = event.getAction() == KeyEvent.ACTION_DOWN; final boolean canceled = event.isCanceled(); final boolean longPress = (flags & KeyEvent.FLAG_LONG_PRESS) != 0; final boolean virtualKey = event.getDeviceId() == KeyCharacterMap.VIRTUAL_KEYBOARD; final String isCitKeyTest=SystemProperties.get("persist.sys.startCitKeyTest"); //Добавить пользовательский сигнал ключа广播а - начало switch (keyCode) { case 135: case 136: case 137: case 139: { if (repeatCount == 0) { Intent myKeyIntent = new Intent(); if(down) { myKeyIntent.setAction("com.rscja.android.KEY_DOWN"); } else { myKeyIntent.setAction("com.rscja.android.KEY_UP"); } myKeyIntent.putExtra("keycode", keyCode); mContext.sendBroadcastAsUser(myKeyIntent, UserHandle.ALL); } } break; } //Добавить пользовательский сигнал ключа广播а - конец ... ... ... ... }
Двое. Назначить значение текущему фокусному полю ввода через广播
Изменить метод onCreate() в InputMethodService.java
/frameworks/base/core/java/android/inputmethodservice/InputMethodService.java
Спасибо за чтение, надеюсь, это поможет вам, спасибо за поддержку нашего сайта!