create (context: Context, resid: Int): MediaPlayer

利用給定的 Resource 建立 MediaPlayer 實例

成功建立後會自動執行 prepare 方法

context:MediaPlayer 要使用的 Context

resid:放在 res/raw/ 資料夾下的音檔的 Resource id

回傳為一個 MediaPlayer 實例

val mediaPlayer = MediaPlayer.create(this, R.raw.country_cue_1)

create (context: Context, uri: Uri)

利用給定的 Uri 建立 MediaPlayer 實例

成功建立後會自動執行 prepare 方法

context:MediaPlayer 要使用的 Context

uri:指定音檔的 uri

回傳為一個 MediaPlayer 實例

將 MediaPlayer 重置為未初始化的狀態

reset()

# reset 後若要再次使用該 MediaPlayer 實例,需重新設定音檔資源
  並調用 prepare 方法以再次初始化及準備該 MediaPlayer。

release

釋放該 MediaPlayer 實例中的所有資源

release ()

# 釋放後該 MediaPlayer 實例會進入到 End 狀態,並且沒有任何方法
  可以從 End 狀態變回其他狀態,也就表示該實例無法再被使用。

# 當確定 MediaPlayer 實例不會在被使用後,就應該要用 release 方法
  釋放資源,否則可能導致設備持續耗電或其他應用無法正常播放。

getDuration

取得 MediaPlayer 中音源的時間長度

getDuration (): Int

  • 回傳為音源的時間長度,單位為毫秒。
  • //  progressSeekBar 為用來顯示播放進度的進度條的 id
    // 此步驟為將進度條的最大值設為音源的時長
    progressSeekBar.max = mediaPlayer.duration
    

    getCurrentPosition

    取得目前已播放的時間長度,也就是播放進度。

    getCurrentPosition (): Int

  • 回傳為播放進度的時間位置,也就是已播放的時長,單位為毫秒。
  • // 設置進度條的進度為播放進度
    progressSeekBar.progress = mediaPlayer.currentPosition
    

    seekTo

    將播放器的播放位置設定至指定的時間位置,也就是指定播放進度。

    seekTo (msec: Int)

  • msec:指定想要的播放時間位置,單位為毫秒。
  • val progressSeekBarListener = object : SeekBar.OnSeekBarChangeListener {
        override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
              if (fromUser) mediaPlayer.seekTo(progress)
          override fun onStartTrackingTouch(seekBar: SeekBar?) {...}
          override fun onStopTrackingTouch(seekBar: SeekBar?) {...}
    

    setVolume

    設定播放器的音量

    此方法設定為改變 APP 播放的音量,不會改變手機系統設定的音量

    setVolume (leftVolume: Float, rightVolume: Float)

    leftVolume:左聲道音量,值的範圍為 0.0~1.0 之間。

    rightVolume:右聲道音量,值的範圍為 0.0~1.0 之間。

    // 設置此監聽器的 SeekBar 為讓用者拖曳決定音量的進度條
    val seekBarListener = object : SeekBar.OnSeekBarChangeListener {
        override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
            mediaPlayer.setVolume(progress / 100f, progress / 100f)
            textView.text = "Volume : $progress %"
        override fun onStartTrackingTouch(seekBar: SeekBar?) { }
        override fun onStopTrackingTouch(seekBar: SeekBar?) { }
    

    isPlaying

    播放器是否正在播放

    isPlaying (): Boolean

  • 回傳為 Boolean 值,播放中為 true,反之為 false。
  •  if (mediaPlayer.isPlaying) {...}
    

    setOnCompletionListener

    用來監聽音樂播放器是否已播放完成,並執行播放完成後要執行的事件。

    setOnCompletionListener (listener: MediaPlayer.OnCompletionListener)

    listener:要設置給該音樂播放器的監聽器。

    MediaPlayer.OnCompletionListener 為一個 Interface,裡面有一個 onCompletion 方法。

    onCompletion (mp: MediaPlayer)

  • mp:設定此監聽器的 MediaPlayer 實例。
  • 一般寫法:

     mediaPlayer.setOnCompletionListener(mediaPlayerListener)  
     val mediaPlayerListener = object: MediaPlayer.OnCompletionListener {
         override fun onCompletion (mp: MediaPlayer){
             // 音樂播完後要執行的事件
    

    Lambda 寫法:

    mediaPlayer.setOnCompletionListener(mediaPlayerListener)  
    val mediaPlayerListener = MediaPlayer.OnCompletionListener {
         // 音樂播完後要執行的事件