场景:android 应用监听输入法按键事件【例如搜索和回车键等】的整个流程分析
android 应用监听输入法按键事件【比如搜索和回车键等】的整个流程分析
继承于InputMethodService类的服务代码如下:
int keyCode = sKey.getKeyCode();
KeyEvent eDown = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN,
keyCode, 0, 0, 0, 0, KeyEvent.FLAG_SOFT_KEYBOARD);
KeyEvent eUp = new KeyEvent(0, 0, KeyEvent.ACTION_UP, keyCode,
0, 0, 0, 0, KeyEvent.FLAG_SOFT_KEYBOARD);
onKeyDown(keyCode, eDown);
onKeyUp(keyCode, eUp);
上面的代码:把有关按键下发给应用,即应用监听输入法按键事件
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (processKey(event, 0 != event.getRepeatCount())) return true;
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (processKey(event, true)) return true;
return super.onKeyUp(keyCode, event);
}
上面的down和up,我们重点看onKeyUp,跟踪下日志,是下面直接返回true了
if (processKey(event, true)) return true;
进入该方法,在该方法里面有如下代码为其覆盖代码:
if (processFunctionKeys(keyCode, realAction)) {
return true;
}
再进入该方法processFunctionKeys,跟踪其走入了下面代码:
if (keyCode == KeyEvent.KEYCODE_ENTER) {
if (!realAction){
Log.d(TAG,"processFunctionKeys call KEYCODE_ENTER return");
return true;
}
sendKeyChar('\n');