마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

home 키 back 키 이벤트 적용을 하는데 안되네요.....

0 추천
boolean back_key = true;
 
 

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  super.onKeyDown(keyCode, event);

  switch (keyCode) {
  case KeyEvent.KEYCODE_BACK:
   if (back_key == true) {
    Toast.makeText(this, "Again click to exit", Toast.LENGTH_LONG)
      .show();
    back_key = false;
    mTimerHander.sendEmptyMessageDelayed(0, 2000);
   } else {
    Toast.makeText(this, "Shut down Sound Bucket ",
      Toast.LENGTH_LONG).show();
    offOBD();
    sound.stop();
    finish();
   }
   break;
  case KeyEvent.KEYCODE_HOME:
   Toast.makeText(this, "홈 확인 ",
     Toast.LENGTH_LONG).show();
   sound.stop();
   break;
  }

  return true;
 }

 private Handler mTimerHander = new Handler() {

  public void handleMessage(Message msg) {

   if (msg.what == 0) {

    back_key = true;

   }

  }

 };

구글링 해서 나오는 소스를 가지고 이래저래 하고 있는데 이상하게 백키는 if만 작동 되고 else 문은 적용이 안되고

홈키는 아이에 적용이 안되고 있습니다...이렇게 하는거 아닌가요?? 소스들은 대부분 거기서 거기던데 ..ㅜㅜ

안왕초보 (1,390 포인트) 님이 2014년 3월 7일 질문

3개의 답변

+2 추천
 
채택된 답변
홈키의 제어는 불가능하지만 이벤트처리는 가능합니다

http://developer.android.com/reference/android/content/Intent.html#ACTION_CLOSE_SYSTEM_DIALOGS

위의 인텐트를 수신해서 인텐트의 reason값을 보시면 결과값으로  홈키가 눌렸는지(homekey),

멀티키가 눌렸는지(recentapps), 화면이 오프가 되었는지(lock)의 판정이 가능합니다.
레미_21 (2,920 포인트) 님이 2014년 3월 7일 답변
안왕초보님이 2014년 3월 7일 채택됨
굳이 복잡한 방법이 필요 없더라구요 ㅎㅎ 지금 홈키 눌렀다가 다시 하는 것을 하고 있는데
public synchronized void onPause() 이 메소드를 사용하면 간편하게 제어 할 수 있더라구요 ㅎㅎ 홈키를 눌렀을 때 pause 상태가 되어 버리는 것 같습니다. 그리고 restart 하는 것을 찾고 있는데
public synchronized void onResume() 이 메소드에 사운드를 다시 시작 하는 것을 하려니 안되더라구요 일단 찾고 다시 말씀 드리겠습니다..  ㅎㅎ
public synchronized void onResume() 가 다시 시작 하는것이 맞는데 흠...바로 적용이 되는 것인지...
onPause() 는 홈키를 눌러 백그라운드로 넘어갔는지 멀티키등 다른 방법으로 백그라운드로 넘어갔는지를 판별할 수가 없죠. 원하시는게 홈버튼의 이벤트가 아니라 단순히 실행중인 액티비티가 화면에 표시되는중인가 아닌가만을 판별하고싶으신거라면 onPause() 로도 대응가능하지요
아 그런가요?? 딱히 홈버튼 이벤트를 적용 하려는 것은 아닙니다. ㅎㅎ 앱이 백그라운드에 나와 있느냐 아니냐 판단 하는 거라서 ㅎㅎ 그런데 onResume 메소드에

if (mChatService != null) {
            // Only if the state is STATE_NONE, do we know that we haven't
            // started already
            if (mChatService.getState() == BluetoothChatService.STATE_NONE) {
                // Start the Bluetooth chat services
                mChatService.start();

            }else{
                         if (sound.soundState(SoundControl.BASE) != null) {
                    sound.play(SoundControl.BASE);
                } else if (sound.soundState(SoundControl.ACTION) != null) {
                    sound.play(SoundControl.ACTION);
                } else {
                    ;
                }
                        }
        }  

이렇게 적용을 하니 앱을 실행 하는 것이 아닌데도 바로 사운드가 나와버리네요 흠...
해결 했습니다 ㅎㅎ
onRestart 함수 사용해서 하니깐 되네요 ㅎㅎ 감사합니다 ㅎㅎ
+2 추천
1. 키를 한번 누를 때마다 DOWN , UP 이벤트가 1번씩 발생합니다. API 문서를 보세요.

2. 홈키는 앱에서 제어할 수 없습니다.
익명사용자 님이 2014년 3월 7일 답변
아 키가 업 다운 된다는것을 생각을 못 했내요 ㅎㅎ 감사합니다. 해결 했습니다. 아 홈키가 적용이 안된다는게 아쉽네요...쩝
+1 추천

아 죄송합니당 ;ㅅ; 잘못봤네용 자삭!

홈키의 경우 이벤트처리를 하실 수는 없어요. 단지 홈 키가 눌려서 나가질 경우 판별할 수 있는
onUserLeaveHint() 함수가 있지요~
초보개발자ㅠ (33,870 포인트) 님이 2014년 3월 7일 답변
복귀했을 때 다시 사운드가 적용이 안되네요..흠..onPause랑 같은 현상이 흠..
해결 했습니다 ㅎㅎ
onRestart 함수 써서 해결 봤습니다 ㅎㅎ 감사합니다
...