경험의 기록

안드로이드에서 배경음악, 백그라운드 다운로드 등을 구현하기 위해서는,

서비스를 사용해야한다.

 

※ 서비스란?

  • 앱이 UI 없이 백그라운드에서 작동하는 것
  • 포그라운드 서비스 : 서비스가 시작되면 액티비티가 종료되어도 서비스가 유지된다. (화면에 보이지 않음)
  • 백그라운드 서비스 : 서비스가 시작되면 액티비티가 종료되어도 서비스가 유지된다. (화면에 보임)
  • 바인드 서비스 : 서비스를 호출한 액티비티와 통신을 할 수 있게 해주며, 호출 액티비티가 전부 종료될 시 서비스가 종료된다.

 

서비스의 종류는 3가지가 있는데,

여기서 백그라운드 서비스를 활용하여 배경음악 재생을 할 수 있다.

 


사용해보기

 

서비스 생성하기

New -> Service 에서 서비스를 생성해준다.

 

서비스를 생성하면 Manifest 에 자동으로 등록된다.

서비스는 액티비티처럼 Manifest에 등록하여 사용하여야 한다.

 

 

레이아웃 만들기

테스트할 가벼운 레이아웃을 만들어 준다.

 

재생할 파일 추가하기

여기서는 파일을 추가하여 직접 재생하는 방법을 사용할 것이므로

res에서 New -> Android Resource Directory 

Resource type raw로 해서 디렉토리를 생성해준다.

 

그곳에 재생하고싶은 음악 파일을 넣어준다.

 

 

MyService

class MyService : Service() {
    lateinit var mp : MediaPlayer

    override fun onBind(intent: Intent): IBinder {
        // Service 객체와 통신할 때 사용
        TODO("Return the communication channel to the service.")
    }

    // 서비스가 호출되었을 때 한번만 호출
    override fun onCreate() {
        super.onCreate()
        mp = MediaPlayer.create(this,R.raw.carole)
        mp.isLooping = false // 반복재생
    }

    // 서비스가 호출될때마다 호출 (음악재생)
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        mp.start()
        return super.onStartCommand(intent, flags, startId)
    }

    // 서비스가 종료될 때 음악 종료
    override fun onDestroy() {
        super.onDestroy()
        mp.stop()
    }
}

아까 생성해준 서비스에서 MediaPlayer를 oncreate에서 배경음악으로 초기화해주고,

OnStartCommand에서 재생시켜준다. OnStartCommand는 서비스가 호출될 때마다 호출된다.

그 후 서비스가 종료될 때 음악을 종료시켜준다.

 

 

MainActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun ServiceStart(view : View){
        val intent = Intent(this,MyService::class.java)
        startService(intent) // 서비스 시작
    }

    fun ServiceStop(view : View){
        val intent = Intent(this,MyService::class.java)
        stopService(intent) // 서비스 종료
    }
}

startService를 하면 서비스를 생성하여 OnStartCommand 를 호출하여 음악을 재생하고,

stopService를 하면 onDestroy를 호출하여 음악을 종료시켜준다.

 

각각 버튼 클릭 시 메소드를 호출해준다.

 

실행하면 음악 재생, 종료가 잘 작동하며 텍스트 수정등 다른 행동을 해도 음악작동에 영향을 미치지 않는다. 

 

github.com/HanYeop/AndroidStudio-Practice/tree/master/ServiceTest

 

HanYeop/AndroidStudio-Practice

안드로이드 학습 내용 저장소. Contribute to HanYeop/AndroidStudio-Practice development by creating an account on GitHub.

github.com

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading