아무리 검색해봐도 뮤직플레이어에 관한 내용만 나오고
배경음악 여러개를 재생하는 방법은 나오지 않아 만들게 되었다.
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");
}
}
'■ Android > Tip' 카테고리의 다른 글
[Android] 레트로핏 사용법 - (어떻게 돌아 가는지 정도만) (0) | 2020.06.14 |
---|---|
[Android] 레트로핏(Retrofit) 이란? - (설명) (0) | 2020.06.07 |
[Android] 음악 - 2.Background에서 음원 재생하기 (0) | 2020.04.27 |
[Android] 음악 - 1.SoundPool(효과음, 노래(음악) 넣기) (0) | 2020.04.27 |
[Android] 버전 바꾸기 - Properites탭 위치, Bulid Tools Version 바꾸기 (0) | 2020.04.26 |