class MyActivity : AppCompatActivity() {
private lateinit var mediaBrowserService: MyMediaBrowserService
private lateinit var mediaSession: MediaSessionCompat
private lateinit var player: ExoPlayer
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my)
// MediaBrowserService를 만듭니다.
mediaBrowserService = MyMediaBrowserService()
startService(Intent(this, MyMediaBrowserService::class.java))
// 미디어 세션을 만듭니다.
mediaSession = MediaSessionCompat(this, "MyMediaSession")
// 미디어 세션의 이벤트를 처리합니다.
mediaSession.setCallback(object : MediaSessionCompat.Callback() {
override fun onPlay() {
// 재생을 시작합니다.
player.play()
}
override fun onPause() {
// 재생을 일시 중지합니다.
player.pause()
}
override fun onStop() {
// 재생을 중지합니다.
player.stop()
}
override fun onSeekTo(pos: Long) {
// 재생 위치를 변경합니다.
player.seekTo(pos)
}
override fun onSkipToNext() {
// 다음 미디어 항목으로 건너뜁니다.
player.next()
}
override fun onSkipToPrevious() {
// 이전 미디어 항목으로 건너뜁니다.
player.previous()
}
})
// 미디어 세션을 ExoPlayer에 연결합니다.
mediaSession.setActive(true)
player.setMediaSession(mediaSession)
// 미디어를 준비합니다.
val mediaSource = ProgressiveMediaSource.Factory(DefaultDataSourceFactory(this))
.createMediaSource(Uri.parse("https://주소 /app/bunny.mp4"))
player.prepare(mediaSource)
// 재생을 시작합니다.
player.play()
}
}
class MyMediaBrowserService : MediaBrowserServiceCompat() {
override fun onGetRoot(
clientPackageName: String,
clientUid: Int,
rootHints: Bundle?
): BrowserRoot? {
// 루트 노드를 반환합니다.
return BrowserRoot(MediaIDHelper.ROOT_ID, null)
}
override fun onLoadChildren(
parentId: String,
result: Result<List<MediaBrowserCompat.MediaItem>>
) {
// 하위 노드를 반환합니다.
val mediaItems = mutableListOf<MediaBrowserCompat.MediaItem>()
// 미디어 항목을 추가합니다.
mediaItems.add(
MediaBrowserCompat.MediaItem(
MediaMetadataCompat.Builder()
.setMediaId("bunny")
.setTitle("토끼")
.setDescription("토끼 동영상")
.setMediaUri(Uri.parse("https://주소../app/bunny.mp4"))
.build(),
MediaBrowserCompat.MediaItem.FLAG_PLAYABLE
)
)
result.sendResult(mediaItems)
}
}