Background 에서 음원 재생하기

1. 사용할 음원 넣기

2. 서비스 생성

3. 서비스 시작하기 및 종료하기

 

 

1. 

res 밑에 raw 폴더를 생성 후 사용할 음원, 효과음을 넣어준다.

 

 

 

2. 서비스 생성

Service 의 라이프 사이클

onCreate -> onStartCommand -> onDestroy

주의!!

이렇게 만들 경우는 AndroidManifest에 자동으로 등록을 해줍니다.

하지만, 그냥 클레스로 만들거나 했을 경우는 Manifest에 등록이 필요하다.(밑에 코드를 등록 해야함)

<service
            android:name=".BackGroundSound"
            android:enabled="true"
            android:exported="true"></service>

 

 

그리고 생성한 BackGroundSound파일 코드 작성

(위에 코드임)

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;

    public BackGroundSound() {
    }

    @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, R.raw.backsound3);
            mediaPlayer.setLooping(true); // true 연속재생, false 한번 재생
            mediaPlayer.start(); // 음원 재생
        } else {
            mediaPlayer.stop(); // 음원 정지
            mediaPlayer.release(); // 시스템 자원 해제
        }
        return START_NOT_STICKY; // 시스템에 의해 종료되면 서비스를 다시 실행하지 않음
//        START_STICKY -> 시스템에 의해 종료되도 서비스를 다시 실행
//        START_REDELIVER_INTENT -> START_REDELIVER_INTENT를 반환 후에 시스템이 해당 서비스를 강제 종료 했다면, 서비스를 재생성하고 이어서 onStartCommand를 호출
//        START_STICKY_COMPATIBILITY -> 이전 버전과의 호환성을 위해 제공????
    }

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

 

 

 

3. 서비스 시작하기 및 종료하기

서비스를 실행하는 곳에서 StartService하기

		@Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            Intent intent = new Intent(OptionActivity.this, BackGroundSound.class);
            if (b == true) {
                intent.putExtra(BackGroundSound.MESSAGE_KEY, true); // 설정에서 true로 바꿈과 동시에 재생 시작
                Log.d("true 로 전환", "<=========");
            } else {
                intent.putExtra(BackGroundSound.MESSAGE_KEY, false); // 설정에서 false로 바꿈과 동시에 정지
                Log.d("false 로 전환", "<=========");
            }
            startService(intent);
        }