@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode == KeyEvent.KEYCODE_Q && event.getRepeatCount() == 0) { event.startTracking(); } return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled()) { return true; } return super.onKeyUp(keyCode, event); } @Override public boolean onKeyLongPress(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode == KeyEvent.KEYCODE_Q) { Log.v(TAG, "길게 누름..."); return true; } return super.onKeyLongPress(keyCode, event); } @Override public boolean dispatchKeyEvent(KeyEvent event) { // TODO Auto-generated method stub Log.v(TAG, "dispatchKeyEvent.."); return super.dispatchKeyEvent(event); }
# 테스트 결과
- 최신 버전에서는 하드 키보드나 소프트 키보드를 통해 일반 키들을 입력하면 onKeyDown() Callback Method를 지원하지 않고 바로 onKeyUp() Callback Method 만 지원하고있다.
- onKeyDown() Callback Method가 호출 되려면 일반 키보드키가 아닌 MENU 나 Back 버튼을 누르면 호출 된다.
- onKeyLongPress() Callback Method를 호출하려면 onKeyDown() Callback Method에서 event.startTracking() 메서드를 호출하여야 지원 가능하며 onKeyUP() Callback Method에서는 지원하지 않는다.
- startTracking() 메서드는 onKeyDown() Callback Method 이외에서는 사용 할 수 없다.
- dispatchKeyEvent() Callback Method는 모든 KeyEvent를 관리하는 Callback Method이므로 위와 같이 다른 KeyEvent Callback Method 함께 사용 하지 못하며 dispatchKeyEvent()만 사용 할 수 있다.
위 테스트에서 알 수 있듯이 하드키보드와 소프트키보드 내 중복되어 표시되는 일반 문자와 숫자는 개발자에게 onKeyUp() Callback Method만 제공하고, onKeyDown()메서드는 안드로이드 내부 시스템에서 처리한다.
또한 dispatchKeyEvent() Callback Method라고 하더라도 Power키 같은 특수한 기능을 하는 키들은 전혀 작동하지 않는다. 그이유는 화면 상의 작업보다 특수한 기능들이 우선이기 때문이다.(ex. 전화 수신과 통화 기능 화면상에서 작업이 우선이다.)
또한 dispatchKeyEvent() Callback Method라고 하더라도 Power키 같은 특수한 기능을 하는 키들은 전혀 작동하지 않는다. 그이유는 화면 상의 작업보다 특수한 기능들이 우선이기 때문이다.(ex. 전화 수신과 통화 기능 화면상에서 작업이 우선이다.)
댓글 없음:
댓글 쓰기