안녕하세요!
오늘 간단하게 포스팅 할 내용은
안드로이드 앱을 만들 때, 자주 사용될 수 있는 특별한 기능중에
"하드웨어 키"의 조작에 대해 알아보도록 하겠습니다.
하드웨어 키란 액정을 제외한 외부의 홈, 메뉴, 뒤로가기, 볼륨, 전원 등의
물리 버튼들을 말하는데요, 특수한 경우에 이런 키들의 기능을 임의로 바꾸거나
해당 기능을 막아줘야 할 일이 발생 합니다.
(예를 들어 홈키를 막아주거나, 뒤로가기 키를 눌렀을때 특정 화면이 나오도록 한다거나)
1. home key를 막아보자.
그다지 어려운 부분은 아닙니다. 그냥 아무곳이나 필요한곳에
onAttachedToWindow();
호출해 주고
아래에 해당 메서드를 override 해주면 되겠습니다.
@Override public void onAttachedToWindow() { this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); }
를 넣어주면 간단히 작동됩니다.
activity 자체의 window를 받아와 해당 화면의 파라미터에서 홈키를 잠궈 줍니다.
단. 여기서 하나 문제가 발생하는데,
ICS 이상의 버전 혹은, 제조사에서 framework 단을 건드려 버튼을 여기저기 만저둔경우
이게 안먹힙니다. 전혀 안먹히고, home 키 자체의 이벤트도 조정이 안됩니다.
이럴땐 어쩔수없이 런쳐로 가던가 framework 자체를 만져줘야하는데 곤란한 일이지요.
일반적인 개발에서 여기까지 내려왔다면 ㅈㅈ쳐야할지도 모릅니다. ;ㅅ;
2. 하드웨어 키에 이벤트 넣기.
이제 홈키를 막았다면, 홈키의 역활을 바꾸어 봅시다.
@Override public boolean dispatchKeyEvent(KeyEvent e){ if(e.getKeyCode() == KeyEvent.KEYCODE_BACK ){ if(e.getAction() == KeyEvent.ACTION_DOWN ){ System. exit(RESULT_OK); } return true; } return super.dispatchKeyEvent(e); }
위 코드는 home키가 눌러졌을 때, App이 정상종료 (RESULT_OK) 값을 주고 종료되도록
구성되어있습니다. 직관적으로 flag값이 주어져있으므로 보시고 간단히 수정하시면 될듯 합니다.