아무리 검색해봐도 뮤직플레이어에 관한 내용만 나오고

배경음악 여러개를 재생하는 방법은 나오지 않아 만들게 되었다.

 

background 음원 재생은

https://hijjang2.tistory.com/245

위의 링크와 연속된 내용 입니다.

 

재생된 음원이 완료 되었을 경우 setOnCompletionListener를 통해 다시 재생시킬 수 있다.

 

먼저 반복할 음원을 배열을 이용해 준비하고

 

그 후, 종료시 다음 곡 마지막 곡일 경우 처음 곡으로 돌아가기 위해 변수 선언해 준다.

 

먼저 playList[0]의 음원을 재생하고 완료시 위에서 만든 변수를 통해 다음곡을 재생, 마지막 곡일경우 초기화를 통해 다시 처음곡을 재생.

 

 

사용예)

아래는 처음 진입시 순서를 랜덤으로 만들어서 반복되게 만들었다.

package com.example.touchtouch;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

public class BackGroundSound extends Service {
    static String MESSAGE_KEY = ""; // intent로 넘어오는 값

    MediaPlayer mediaPlayer;
    int[] playList; // 재생 음원
    int[] randomList; // 무작위 순서
    int play = 0; // 현재 재생중인 음원

    public BackGroundSound() {
    }

    @Override
    public void onCreate() {
        super.onCreate();
        playList = new int[3]; // 각 배열에 재생할 목록을 넣어주고
        playList[0] = R.raw.backsound1;
        playList[1] = R.raw.backsound2;
        playList[2] = R.raw.backsound3;

        randomList = new int[playList.length]; // 재생할 크기만큼 생성

        for (int i = 0; i < playList.length; i++) { // 중복 되지 않게 무작위로 순서 재생 목록에 넣어주고
            int random = (int) (Math.random() * 3);
            randomList[i] = playList[random];
            for (int j = 0; j < i; j++) {
                if (randomList[i] == randomList[j]) {
                    i--;
                    break;
                }
            }
        }

    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) { // 설정값의 on, off에 따라 재생, 정지시키게 만듬
        boolean message = intent.getExtras().getBoolean(BackGroundSound.MESSAGE_KEY); // 넘어오는 값으로 message 세팅
        if (message) {
            mediaPlayer = MediaPlayer.create(this, randomList[play]);
//            mediaPlayer.setLooping(true); // true 연속재생, false 한번 재생  < -- setOnCompletionListener을 통해 연속 재생을 시켜서 사용 하지 않았다.
            mediaPlayer.start(); // 음원 재생
            mediaPlayer.setOnCompletionListener(completionListener);
        } else {
            mediaPlayer.stop(); // 음원 정지
            mediaPlayer.release(); // 시스템 자원 해제
        }
        return START_NOT_STICKY; // 시스템에 의해 종료되면 서비스를 다시 실행하지 않음
//        START_STICKY -> 시스템에 의해 종료되도 서비스를 다시 실행
//        START_REDELIVER_INTENT -> START_REDELIVER_INTENT를 반환 후에 시스템이 해당 서비스를 강제 종료 했다면, 서비스를 재생성하고 이어서 onStartCommand를 호출
//        START_STICKY_COMPATIBILITY -> 이전 버전과의 호환성을 위해 제공????
    }

    MediaPlayer.OnCompletionListener completionListener = new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
            play++;
            if (play < randomList.length) { // 다음 음원 재생 
                mediaPlayer = MediaPlayer.create(BackGroundSound.this, randomList[play]);
                mediaPlayer.start();
            } else { // 마지막 음원이였다면 다시 처음 음원 재생
                play = 0;
                mediaPlayer = MediaPlayer.create(BackGroundSound.this, randomList[play]);
                mediaPlayer.start();
            }
        }
    };

//    @Override
//    public void onDestroy(){ // stopService로 종료시 실행
//        super.onDestroy();
//        mediaPlayer.stop();
//        mediaPlayer.release();
//    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}