[英]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.