実装
@Composable
private fun MyMp3Mp4View() {
val context = LocalContext.current
// rememberを使用することで、コンポーザブルの再構成時にインスタンスが再作成されるのを防ぐ
// 初期値はnullです。
var mediaPlayer: MediaPlayer? by remember {
mutableStateOf(null)
}
// コンポーザブルが破棄される際にMediaPlayerを解放するための副作用。
// リソースリークを防ぐ。
DisposableEffect(Unit) {
onDispose {
mediaPlayer?.release() // MediaPlayerが存在する場合は、解放します。
mediaPlayer = null
}
}
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Column(
horizontalAlignment = Alignment.CenterHorizontally
) {
Button(
onClick = {
mediaPlayer?.release()
mediaPlayer = MediaPlayer.create(context, R.raw.freesound)
mediaPlayer?.start()
}
) {
Text(text = "Play MP3")
}
AndroidView(
factory = { context ->
VideoView(context).apply {
setVideoURI(Uri.parse("android.resource://" + context.packageName + "/" + R.raw.freemovie))
setMediaController(MediaController(context))
start()
}
},
modifier = Modifier.fillMaxWidth()
)
}
}
}