오디오 플레이어를 테스트 하다보니 화면 자동꺼짐 설정시간에 따라 음악 재생중에 화면이 꺼지면서 재생이 되지 않는 현상을 발견했다.
그래서 음악 재생중에는 화면 꺼짐이 발생하지 않게 처리하기 위한 코드를 추가했다.
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_player); mContext = this.getBaseContext();
// 화면 꺼짐 방지 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
// 재생할 목록 배열에 저장하기 Intent intent = getIntent(); list =(ArrayList<Song_Item>) intent.getSerializableExtra("playList");
mediaPlayer = new MediaPlayer();
} |
위와 같이 한줄을 추가해주면 된다.
선택한 노래가 5곡인데 5곡이 모두 재생되고 나면 화면 꺼짐 방지 설정 때문에 아무런 조치를 안하면 화면이 계속 껴진 상태로 남아있더라.
그러므로 화면 해제 설정을 해주어야 한다.
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
화면 설정 해제 명령어를 넣어줬음에도 불구하고 화면(SCREEN)이 계속 ON 상태가 되는 현상이 있어서 Log를 찍어보니까 songProgressBar 핸들러 처리가 잘못되어 문제가 생겼다.
그래서 해당 코드를 수정하고 http://link2me.tistory.com/1350 내용을 업데이트 했다.
음악 재생이 완료되지 마자 자동꺼짐 설정 모드로 변경되지는 않는다.
만약 그렇게 하고 싶다면
@SuppressLint("Wakelock") private void acquireCPUWakeLock(Context context) { // 잠든 화면 깨우기 if (wakeLock != null) { return; }
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "hi"); wakeLock.acquire(); }
private void releaseCpuLock() { Log.e("PushWakeLock", "Releasing cpu WakeLock = " + wakeLock);
if (wakeLock != null) { wakeLock.release(); wakeLock = null; } }
|
위 코드를 적절히 활용하면 될 것으로 본다.
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { if(isRepeat){ // 반복재생 playMusic(list.get(position)); } else if(isShuffle){ // 랜덤재생 Random rand = new Random(); position = rand.nextInt((list.size() - 1) - 0 + 1) + 0; playMusic(list.get(position)); } else { if(position + 1 < list.size()) { position++; playMusic(list.get(position)); } else { Log.e("Music_Off","음악종료"); seekHandler.removeCallbacks(mUpdateTimeTask); position = 0; acquireCPUWakeLock(mContext); releaseCpuLock(); //getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }
} }); |