현재 MainActivity 와 SongActivity 에서 MediaPlayer 를 활용해서 음악을 재생하는 데 까지 성공했다.
다른 시중(?) 에 있는 음악 어플들은 Service 를 이용해서 백그라운드에서 음악을 재생한다.
하지만 난 그냥 Activity 에서 MediaPlayer 의 변수를 선언해서 음악을 재생했다.
처음에는 Main과 Song에서 각각 MediaPlayer 변수를 선언 해 주고 싱크를 최대한 맞춰주려고 했다.
그런데 노래를 재생시킨 채로 Main 과 Song 사이를 서로 이동하면 아무리 싱크를 ms 단위까지 맞추려고 해도 끊기는 현상이 발생했다.
그래서 난 Main에서만 MediaPlayer 변수를 선언하고, 그 변수를 Song 에서 끌어오는 방식을 택했다.
키워드는 "다른 Activity 의 변수 사용하기!!!"
//MainActivity.kt
class MainActivity : AppCompatActivity() {
init { instance = this}
companion object {
//자신의 인스턴스를 반환하는 getInstance() 메소드 등록.
//companion object는 인스턴스를 생성하지 않고, 바로 클래스의 내부에 접근 가능.
//SongActivity에서 mediaPlayer 변수 끌어다가 쓸 수 있게 하려고 사용!
private var instance : MainActivity? = null
fun getInstance():MainActivity? {
return instance
}
}
override fun onCreate(savedInstanceState: Bundle?) {
,,,
}
}
MainActivity 의 전역변수 선언 부분에 위와같은 코드를 입력한다.
companion object 를 이용해서 인스턴스 생성 없이 바로 내부의 함수나 변수로 접근이 가능하다.
SongActivity에서 companion object 의 getInstance() 로 접근을 해서 instance, 즉 MainActivity 를 반환받는 것이다.
그로써 SongActivity 에서 MainActivity로 접근이 가능해진다.
아래 코드는 SongActivity 에서 Main 으로 접근하는 코드이다.
//SongActivity.kt
private val mainActivity = MainActivity.getInstance()
//MainActivity의 mediaPlayer 를 사용하기 위한 코드
,,,
,,,
mainActivity?.mediaPlayer?.seekTo(song.currentTime)
//위 처럼 MainActivity 의 mediaPlayer 참조 가능
이 외에도 context 라는 키워드로 구글링을 해 봐도 좋을 거 같다.
'안드로이드 > [Kotlin]' 카테고리의 다른 글
[Kotlin] Intent 에 JSON string 담아서 전송 (Feat. Gson) (0) | 2021.11.04 |
---|---|
[Kotlin] Seekbar 간단설명 (2) | 2021.10.29 |
[Kotlin] Worker Thread(작업 스레드) & Handler를 활용한 UI 처리 (0) | 2021.10.29 |
[Kotlin] registerForActivityResult() 사용법 (Feat. startActivityForResult 의 deprecated) (0) | 2021.10.25 |
[Kotlin] ViewPager2 & TabLayout (Feat. FragmentStateAdatper, TabLayoutMediator) (0) | 2021.10.24 |