일련의 주요 이벤트를 시뮬레이트하고 싶습니다. 조금 시간을 들여 검색 한 결과, BaseInputConnection
유형의 객체가 sendkeyEvent
발견되었습니다. 그래서 onCreate()
함수의 MainActivity
클래스에서, 나는이 활동에 묶는 textview에 keyevent를 세 번 보낸다.onKey in activity가 호출되지 않았습니다.
@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"가 printend가 세 번 인쇄 된 것을 알 수 있습니다. 이는 keyevents가 전송되었음을 의미합니다. 그러나 "OnKey starts"은 없었습니다. 왜 OnKey() 함수가 호출되지 않았습니까?
"OnKeyListener는 하드웨어 키보드에서만 작동합니다"라는 점을 알려 주셔서 감사합니다. 그 이유는 내 OnKey 함수가 호출되지 않은 이유입니다. 그러나 나는 실제 키보드 또는 소프트 키보드에서 생성되지 않은 ** 가상 키 이벤트 **를 다루는 활동 (또는보기 또는 일부 서비스)을 원합니다. – dudu
텍스트 워처조차도 당신의 문제를 해결할 것입니다. – Anonymous