안드로이드 개발 질문/답변
(글 수 45,052)
Mp3Player를 제작중에 있는데 문제가 있어 조언을 구하고자 글을 올립니다.
현재 Mp3List 에서 곡 선택 후 >> Mp3Player 가 실행되게 구현하였습니다. 그리고 Mp3Player 에서 Notification 등록을 시켜 주고
동작까지 확인한 상태 입니다. 여기서 부터 문제인게 Home_Key 와 Back_Key 를 눌렀을 떄 Back_Key 동작 떄문에 진행이 안되고 있습니다.
Home_Key : Mp3Player >> Home_Key >> 메인화면 >> 노티바에 등록된 mp3Player 클릭 >> 동작중인 Mp3Player 화면 복귀(정상동작)
Back_Key 를 누르면 문제가 발생하게 되는데요
첫번쨰 - Back_Key : Mp3Player >> back_Key >> Mp3List >> 노티바에 등록된 mp3Player클릭 >> 동작중인 Mp3Player 화면 복귀시 에러
두번쨰 - Back_Key : Mp3Player >> Mp3List >> Mp3List에서 다시 Back_Key를 누르게 되면 Mp3Player 화면으로 돌아가게 됩니다.
이후에는 Back_Key 를 누르면 Mp3List와 Mp3Player Activity만 왔다갔다 하게 됩니다.
Activity Lift 사이클을 보면 Back_Key 로 이벤트가 발생하면 현재 Activity 에서 onDestroy 가 호출이 되서, 이전 Activity 에서 노티바에
등록된 mp3Player 를 클릭하면 onCreate가 호출되면서 mp3Player가 재시작 되면서 기존에 동작되던 mp3Player 가 호출이 되지 않고
있습니다. 그래서 back_Key 이벤트가 발생할 떄 onKeyDown을 구현하여 back_key 이벤트를 가로채서 작업을 진행 하니
back_key 를 눌렀을 떄 mp3Player >> Mp3List >>mp3Player Activity 무한 반복이 되고 있는 상황입니다.
소리바다나 Music Player 어플을 보면 back_Key 이벤트가 발생해도 노티바에 등록된 플레이어를 누르면 동작중인 mp3Player 로 잘
넘어가는데 무엇이 문제인지 모르겠습니다.
이와 관련된 작업을 해보신분 계시면 조언좀 부탁드리겠습니다.
다음은 노티바 등록 소스와 back_key 이벤트 가로챈 후 처리 소스 입니다.
[Notification등록]
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.icon,mCurrentTitle,0);
Intent i = new Intent(Mp3Player.this,Mp3Player.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pi = PendingIntent.getActivity(Mp3Player.this, 0, i, 0);
notification.setLatestEventInfo(Mp3Player.this, mCurrentTitle, mCurrentSinger, pi);
notificationManager.notify(notification.number, notification);
[back_key 가로챈 후 처리 코드]
@Override public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
event.startTracking();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled()) {
if(isRegister == NOTIFIY_STATUS_REGISTER){
Intent i = new Intent(Mp3Player.this,Mp3List.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
}
else{
this.finish();
}
return true;
}
return super.onKeyUp(keyCode, event);
}