新来的机器人和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()
}}
发布于 2022-05-13 06:16:19
MediaPlayer.create(...)在调用prepare()后返回MediaPlayer的新实例。在stop()和reset()之后调用create(...)是无用的。使用原始资源时,必须使用setDataSource和AssetFileDescriptor (如setDataSource(resources.openRawResourceFd(R.raw.your_media)) )
https://stackoverflow.com/questions/72224529
复制相似问题