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

OnKeyDown함수에서 Return false 시 App 강제종료 현상

0 추천

안녕하세요

안드로이드 공부중인 사람입니다..

 

메뉴버튼 사용과 관련하여 문의 드립니다.

 

일단 현상은 제목과 같습니다.

 

메뉴버튼만 누르면 핸드폰에 설치된 어플이 강제종료됩니다.

 

키 이벤트에 뒤로가기 버튼을 누르면 종료할것인지 물어보는 창이 새로 뜨도록 하였고

메뉴버튼을 누르면 false를 리턴합니다.

이렇게 해야 onOptionsItemSelected 함수를 호출하여 메뉴를 띄운다고 해서 그렇게 했습니다.

그런데 메뉴버튼 이벤트에 대해서 return true를 해야만 강제종료되지 않습니다.

 

아래에 코드를 추가했으며, 혹시몰라 로그캣도 추가했습니다.

return super.onKeyDown(keyCode, event) 를 해도 마찬가지입니다.

 

이상입니다.

 

@Override
	 public boolean onKeyDown(int keyCode, KeyEvent event)
	  {
	   
	   if(keyCode == KeyEvent.KEYCODE_BACK)
	   {
	    AlertDialog.Builder alertDlg = new AlertDialog.Builder(this);
	      
	    alertDlg.setMessage("종료 하시겠습니까?");
	    alertDlg.setPositiveButton("예", new DialogInterface.OnClickListener() { //확인 버튼
	     @Override
	    public void onClick(DialogInterface dialog, int whichButton) {
	      
	     System.exit(0); //시스템 종료
	     
	     }
	      }) ;        
	      alertDlg.setNegativeButton("아니오", new DialogInterface.OnClickListener() { // 취소 버튼
	       @Override
	    public void onClick(DialogInterface dialog, int whichButton) {         
	       
	        dialog.cancel();   
	       }
	      });
	      AlertDialog alert = alertDlg.create();
	      alert.setTitle("뒤로가기 버튼 이벤트"); //알림창 상단 타이틀
	      alert.setIcon(R.drawable.ic_launcher); // 알림창에 이미지 삽입
	      alert.show();
	      
	      return true;
	   }
	   
	   if(keyCode == KeyEvent.KEYCODE_MENU)
	   {
		   return false;
	   }
	   
	   return false;
	  }
	
09-05 17:58:20.111: I/chromium(28071): [INFO:simple_index_file.cc(397)] Simple Cache Index is being restored from disk.
09-05 17:58:20.381: I/chromium(28071): [INFO:CONSOLE(6)] "Viewport target-densitydpi is not supported.", source: http://m.naver.com/ (6)
09-05 17:58:21.946: D/dalvikvm(28071): GC_FOR_ALLOC freed 35K, 7% free 10031K/10748K, paused 17ms, total 17ms
09-05 17:58:22.006: I/chromium(28071): [INFO:async_pixel_transfer_manager_android.cc(56)] Async pixel transfers not supported
09-05 17:58:22.026: I/chromium(28071): [INFO:async_pixel_transfer_manager_android.cc(56)] Async pixel transfers not supported
09-05 17:58:22.841: I/chromium(28071): [INFO:CONSOLE(0)] "Blocked a frame with origin "http://googleads.g.doubleclick.net" from accessing a 
 
frame with origin "http://m.naver.com". Protocols, domains, and ports must match.", source:  (0)
09-05 17:58:37.771: W/UnimplementedWebViewApi(28071): Unimplemented WebView method onKeyDown called from: android.webkit.WebView.onKeyDown
 
(WebView.java:2182)
09-05 17:58:37.806: E/InputEventSender(28071): Exception dispatching finished signal.
09-05 17:58:37.806: E/MessageQueue-JNI(28071): Exception in MessageQueue callback: handleReceiveCallback
09-05 17:58:37.816: E/MessageQueue-JNI(28071): java.lang.NullPointerException
09-05 17:58:37.816: E/MessageQueue-JNI(28071): at android.support.v7.app.ActionBarImplICS.getThemedContext(ActionBarImplICS.java:302)
09-05 17:58:37.816: E/MessageQueue-JNI(28071): at android.support.v7.app.ActionBarImplJB.getThemedContext(ActionBarImplJB.java:20)
09-05 17:58:37.816: E/MessageQueue-JNI(28071): at android.support.v7.app.ActionBarActivityDelegate.getActionBarThemedContext
 
(ActionBarActivityDelegate.java:210)
09-05 17:58:37.816: E/MessageQueue-JNI(28071): at android.support.v7.app.ActionBarActivityDelegate.getMenuInflater
 
(ActionBarActivityDelegate.java:100)
09-05 17:58:37.816: E/MessageQueue-JNI(28071): at android.support.v7.app.ActionBarActivity.getMenuInflater(ActionBarActivity.java:72)
09-05 17:58:37.816: E/MessageQueue-JNI(28071): at android.app.Activity.onCreatePanelMenu(Activity.java:2647)
09-05 17:58:37.816: E/MessageQueue-JNI(28071): at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:225)
09-05 17:58:37.816: E/MessageQueue-JNI(28071): at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu
 
(ActionBarActivity.java:233)
09-05 17:58:37.816: E/MessageQueue-JNI(28071): at android.support.v7.app.ActionBarActivityDelegateICS.onCreatePanelMenu

 

원희언니 (190 포인트) 님이 2014년 9월 5일 질문

1개의 답변

0 추천
back key를 누르면 Activity에서 onBackPressed()가 호출 됩니다.

onkeydown에서 처리하지 마시고 onBackPressed()에서 종료할것인지 예, 아니오에 대한 다이얼로그를 띄우시고

예를 누르면 return true.. 아니면 return false로 해주시면 될 듯 합니다.
익명사용자 님이 2014년 9월 6일 답변
...