안드로이드(Android)

뮤직 플레이어(MusicPlayer)_6 [Android_Kotlin]

Gnow 2023. 3. 20. 00:05
728x90
반응형

참고 교재 : Joyce의 안드로이드 앱 프로그래밍 - 홍정아

 

전체 코드가 궁금하다면 아래 링크를 참고하시길 바랍니다.

 

원본 코드 : Joyce의 안드로이드 앱 프로그래밍 - 홍정아

현재 블로그 작성 코드 :Gnow


6. 버튼 초기화하기

[코드]

package com.example.simplemusicplayer

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button

// View.OnClickListener : 사용자가 뷰를 클릭했을 때 어떤 행동을 할지 정할 수 있다.
class MainActivity : AppCompatActivity(), View.OnClickListener {

    lateinit var btn_play : Button
    lateinit var btn_pause : Button
    lateinit var btn_stop : Button

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

        btn_play = findViewById(R.id.btn_play)
        btn_pause = findViewById(R.id.btn_pause)
        btn_stop = findViewById(R.id.btn_stop)

        // 리스너 등록
        btn_play.setOnClickListener(this)
        btn_pause.setOnClickListener(this)
        btn_stop.setOnClickListener(this)
    }

    // 클릭 했을때 실행되는 콜백 함수
    override fun onClick(v: View?) {
        when(v?.id) {
            R.id.btn_play -> {
                play()
            }

            R.id.btn_pause -> {
                pause()
            }

            R.id.btn_stop -> {
                stop()
            }
        }
    }

    override fun onResume() {
        super.onResume()
    }

    override fun onPause() {
        super.onPause()
    }

    private fun play() {
    }

    private fun pause() {
    }

    private fun stop() {
    }
}

 


7. 액티비티와 서비스 연결하기

[코드]

package com.example.simplemusicplayer

import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.ServiceConnection
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.IBinder
import android.view.View
import android.widget.Button

	@@ -11,7 +17,19 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
    lateinit var btn_play : Button
    lateinit var btn_pause : Button
    lateinit var btn_stop : Button
    var mService: MusicPlayerService? = null    // 뮤직 플레이어 서비스를 담을 수 있는 변수 생성

    // 서비스와 구성요소 연결 상태 모니터링, bindService() 함수를 호출할 때 두 번째 인수
    val mServiceConnection = object : ServiceConnection {
        override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
            mService = (service as MusicPlayerService.MusicPlayerBinder).getService()
        }

        override fun onServiceDisconnected(name: ComponentName?) {
            mService = null     // 만약 서비스가 끊기면, mService 를 null 로 만들어준다.
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
	@@ -43,20 +61,46 @@ class MainActivity : AppCompatActivity(), View.OnClickListener {
        }
    }

    override fun onResume() {   // 액티비티가 사용자에게 보일 때마다 실행
        super.onResume()

        // 서비스 실행
        if (mService == null) { // 서비스가 액비티비와 연결이 안되었을 경우 버전에 따라 호출
            // 안드로이드 O 이상이면 startForegroundService 를 사용해야 한다.
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                startForegroundService(Intent(this,MusicPlayerService::class.java))
            } else {
                startService(Intent(applicationContext, MusicPlayerService::class.java))
            }

            // 액티비티를 서비스와 바인드시킨다.
            val intent = Intent(this, MusicPlayerService::class.java)
            // bindService(바인드할 서비스 안내, 모니터링 함수, 바인드할 시점에 서비스가 실행안된 상태면 실행)
            bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE)
        }
    }

    override fun onPause() {
        super.onPause()
        // 사용자가 액티비티를 떠났을 때 처리
        if (mService != null){
            if (!mService!!.isPlaying()) {  // mService가 재생되고 있지 않다면
                mService!!.stopSelf()   // 서비스를 중단
            }
            unbindService(mServiceConnection)   // 서비스로부터 연결을 끊는다.
            mService = null
        }
    }

    private fun play() {
        mService?.play()
    }

    private fun pause() {
        mService?.pause()
    }

    private fun stop() {
        mService?.stop()
    }
}

8. 앱 테스트하기


※ 본 게시글은 'Joyce의 안드로이드 앱 프로그래밍 - 홍정아' 책의 내용과

Android Developers의 공식문서 내용을 참고하여 작성하였습니다.

 

전체 코드가 궁금하다면 아래 링크를 참고하시길 바랍니다.

 

원본 코드 : Joyce의 안드로이드 앱 프로그래밍 - 홍정아

현재 블로그 작성 코드 :Gnow

728x90
반응형