我想模拟一系列重要事件。经过一段时间的搜索,我发现BaseInputConnection
类型的对象的方法sendkeyEvent
。所以在MainActivity
类的onCreate()
函数中,我发送了一个keyevent三次到一个textview,我绑定到这个activity。未激活活动中的onKey
@Override
protected void onCreate(Bundle savedInstanceState){
...
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setText(stringFromJNI);
tv.setOnKeyListener(this);
BaseInputConnection mInputConnection = new BaseInputConnection(tv, true);
//BaseInputConnection mInputConnection = new BaseInputConnection(tv, false);
KeyEvent kleft = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT);
for(int i=0;i<3;i++){
mInputConnection.sendKeyEvent(kleft);
Log.d(TAG, "keyevent sent");
}
}
MainActivity
类实现了接口OnKeyListener
。
@Override
public boolean OnKey(View v, int keyCode, KeyEvent){
Log.d(TAG, "OnKey starts.");
if(event.getKeyCode()==KeyEvent.KEYCODE_DPAD_LEFT && event.getAction()==KeyEvent.ACTION_DOWN){
Log.d(TAG, "key left.");
return true;
}
return false;
}
检查logcat的输出后,我发现“keyevent sent”是三次打印,这意味着keyevents被发送。但是没有“OnKey开始”。为什么OnKey()函数未被调用?
感谢您指出“OnKeyListener仅适用于硬件键盘”。这解释了为什么我的OnKey函数未被调用。但我希望活动(或视图或某种服务)处理**虚拟键事件**,这些虚拟键事件不是由真实键盘或软键盘生成的。 – dudu
即使文本观察者会解决你的问题,我猜。 – Anonymous