簡體   English   中英

如何在 Kotlin 中為 Android MediaPlayer 設置新的音頻數據源

[英]How to set a new audio data source for Android MediaPlayer in Kotlin

Android 和 Kotlin 的新手...

我正在嘗試為 Android MediaPlayer 設置一個新的音頻數據源。 下面的代碼編譯並運行,但沒有播放聲音。 沒有崩潰,沒有錯誤。 祝酒詞“媒體播放器准備好了!” 從來沒有出現過,所以我認為媒體播放器沒有做好准備。

如果我注釋掉“val mediaPlayer = MediaPlayer.create(this, R.raw.fifo50)”之后的行,那么當我單擊 btnMaintain 按鈕時它會播放 fifo50 聲音。

這里缺少什么?

class MainActivity :
AppCompatActivity(),
MediaPlayer.OnPreparedListener{


override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val btnMaintain = findViewById<Button>(R.id.btnMaintain)
    val mediaPlayer = MediaPlayer.create(this, R.raw.fifo50)
    mediaPlayer.stop()
    mediaPlayer.reset()
    mediaPlayer.setAudioAttributes(
        AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_MEDIA)
            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            .build()
                )
    mediaPlayer.setDataSource("android.resource://" + this.packageName + "/raw/maintain_speed")
    Toast.makeText(this, "Preparing Media Player", Toast.LENGTH_SHORT).show()
    mediaPlayer.setOnPreparedListener(this)
    mediaPlayer.prepareAsync()
    Toast.makeText(this, "Asynchronous preparation of Media Player started", Toast.LENGTH_SHORT).show()

    btnMaintain.setOnClickListener() {
        mediaPlayer.isLooping = true
        mediaPlayer.start()
    }
}

override fun onPrepared(p0: MediaPlayer) {
    Toast.makeText(this, "Media Player prepared!", Toast.LENGTH_SHORT).show()
}

}

MediaPlayer.create(...)在調用prepare()后返回MediaPlayer的新實例。 create(...)之后調用stop()reset()是沒用的。 使用原始資源,您必須使用AssetFileDescriptor設置數據源,例如setDataSource(resources.openRawResourceFd(R.raw.your_media))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM