再生・停止
res/values/strings.xml
<resources>
<string name="app_name">myapp</string>
<string name="bt_play">PLAY</string>
<string name="bt_pause">PAUSE</string>
</resources>
res/raw/sample_music.mp3
DLしたsample_music.mp3を格納します。
音声ファイル名には小文字とアンダーバーしか使えません。
activity_main.xml
<Button
android:id="@+id/btPlay"
android:text="再生" />
MainActivity.kt
package com.example.app5
import android.media.MediaPlayer
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.Button
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
class MainActivity : AppCompatActivity() {
private var _player: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
_player = MediaPlayer()
val mediaFileUri = Uri.parse("android.resource://${packageName}/${R.raw.sample_music}")
_player?.apply {
setOnPreparedListener(PlayerPreparedListener())
setOnCompletionListener(PlayerCompletionListener())
setDataSource(this@MainActivity, mediaFileUri)
prepareAsync()
}
val btPlay = findViewById<Button>(R.id.btPlay)
btPlay.setOnClickListener {
onPlayButtonClick(it)
}
}
// 準備完了リスナ
private inner class PlayerPreparedListener: MediaPlayer.OnPreparedListener {
override fun onPrepared(mp: MediaPlayer) {
val btPlay = findViewById<Button>(R.id.btPlay)
btPlay.isEnabled = true
}
}
// 再生終了リスナ
private inner class PlayerCompletionListener : MediaPlayer.OnCompletionListener {
override fun onCompletion(mp: MediaPlayer) {
val btPlay = findViewById<Button>(R.id.btPlay)
btPlay.text = "再生"
}
}
// 再生ボタンをタップしたときの処理
fun onPlayButtonClick(view: View) {
_player?.let {
val btPlay = findViewById<Button>(R.id.btPlay)
if(it.isPlaying) {
it.pause()
btPlay.text = "再生"
} else {
it.start()
btPlay.text = "一時停止"
}
}
}
//
override fun onStop() {
_player?.let {
if(it.isPlaying) {
it.stop()
}
it.release()
}
_player = null
super.onStop()
}
}