如何在 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(...)
return 调用 prepare()
后 MediaPlayer
的新实例。在 create(...)
之后调用 stop()
和 reset()
是没有用的。使用原始资源,您必须使用 AssetFileDescriptor
设置数据源,例如 setDataSource(resources.openRawResourceFd(R.raw.your_media))
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(...)
return 调用 prepare()
后 MediaPlayer
的新实例。在 create(...)
之后调用 stop()
和 reset()
是没有用的。使用原始资源,您必须使用 AssetFileDescriptor
设置数据源,例如 setDataSource(resources.openRawResourceFd(R.raw.your_media))