Key events executed on key-up

안드로이드 2.0 부터는 HOME, MENU, BACK, SEARCH 키가 버츄얼키로 들어간 것을 지원합니다. 더 나은 사용자 경험을 위해 이 키들은 Key Up에 이 버튼들을 실행하게 됩니다.

만약 현재 애플리케이션이 Key-Down시에 버튼을 입력을 처리하고 있다면 영향을 미칠 수 있습니다. BACK키일 경우는 특히 그렇기 때문에 애플리케이션이 키를 잘 처리할 수 있도록 만들어주어야 합니다.  

보통의 경우 BACK 키를 가로채서 처리하는 것은 좋지 않지만 만약 그런 것을 필요로 하고 현재 그 처리를 Key Down에 하고 있다면 코드를 수정할 필요가 있습니다. 

안드로이드 2.0에서 새로 추가된 메소드들로 이것을 처리할 수도 있는데요. Dialog나 Activity에서는 onBackPressed() Method 를 구현하시고 View에서 처리할때는 onKeyDown을 다음과 같이 처리합니다.

        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK
                    && event.getRepeatCount() == 0) {
                event.startTracking();
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    
        public boolean onKeyUp(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
                    && !event.isCanceled()) {
                // *** DO ACTION HERE ***
                return true;
            }
            return super.onKeyUp(keyCode, event);
        }

낮은 버전에서 동작하는 경우는 위 코드와 같이 처리하면 되구요. 트래킹 플래그를 하나 저장해놓고, 포커스가 변경되거나 할때 플래그를 클리어하면 됩니다. 

BACK등의 동작을 덮어쒸우는 것은 많은 애플리케이션에서 하고 계실 것 같아서 참고하시라고 번역해놓았습니다. 보통 2.0 이전 예제들은 거의다 키처리를 keyDown에서 처리하고 있기에 많은 앱에 해당하는 내용인것 같아요. 

http://developer.android.com/sdk/android-2.0.html#api