[Jetpack Compose] 音声ファイル、動画ファイルを再生する方法

実装

@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()
			)
		}
	}
}