728x90

오디오 플레이어를 테스트 하다보니 화면 자동꺼짐 설정시간에 따라 음악 재생중에 화면이 꺼지면서 재생이 되지 않는 현상을 발견했다.


그래서 음악 재생중에는 화면 꺼짐이 발생하지 않게 처리하기 위한 코드를 추가했다.


@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);
            }
        }

    }
});
 


블로그 이미지

Link2Me

,