我已將 setOnCompletionListener 添加到我的代碼中,但音頻檔案在完成后仍然繼續回圈(從 firebase 存盤 URL 檢索的音頻檔案)......我不太確定問題是什么,因為我添加的代碼似乎挺好的...
這是允許用戶播放音頻檔案的活動的代碼
class DetailActivity : AppCompatActivity() {
private lateinit var imageViewClass: ImageView
private lateinit var textViewClassName: TextView
private lateinit var textViewClassDes: TextView
private lateinit var textViewClassContent: TextView
private var stop:Boolean = false
var mediaPlayer: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detail)
val btnPlay: Button = findViewById(R.id.btnPlay)
val btnStop: Button = findViewById(R.id.btnStop)
imageViewClass = findViewById(R.id.imageViewClassImage)
textViewClassName = findViewById(R.id.textViewClassName)
textViewClassDes = findViewById(R.id.textViewClassDescription)
textViewClassContent = findViewById(R.id.textViewClassContent)
val classImage = intent.getStringExtra("class_image")
val className = intent.getStringExtra("class_name")
val classDes = intent.getStringExtra("class_des")
val classContent = intent.getStringExtra("class_content")
val classAudio = intent.getStringExtra("class_audio")
Glide.with(this)
.load(classImage)
.centerCrop()
.into(imageViewClass)
textViewClassName.text = className
textViewClassDes.text = classDes
textViewClassDes.text = classDes!!.replace("\\n", "\n")
textViewClassContent.text = classContent
textViewClassContent.text = classContent!!.replace("\\n", "\n")
btnPlay.isEnabled = true
btnStop.isEnabled = false
btnPlay.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
if (mediaPlayer == null) {
mediaPlayer = MediaPlayer.create(this@DetailActivity, Uri.parse(classAudio))
mediaPlayer!!.isLooping = true
mediaPlayer!!.start()
btnStop.isEnabled = true
btnPlay.isEnabled = false
Toast.makeText(applicationContext, "Audio Starts", Toast.LENGTH_SHORT).show()
} else {
mediaPlayer!!.start()
}
}
})
mediaPlayer?.setOnCompletionListener {
btnPlay.isEnabled = true
btnStop.isEnabled = false
mediaPlayer!!.stop()
mediaPlayer!!.reset()
mediaPlayer!!.release()
Toast.makeText(applicationContext, "end", Toast.LENGTH_SHORT).show()
}
btnStop.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
if(mediaPlayer!!.isPlaying){
stop = false
mediaPlayer!!.stop()
mediaPlayer!!.reset()
mediaPlayer!!.release()
mediaPlayer = null
btnPlay.isEnabled = true
btnStop.isEnabled = false
Toast.makeText(applicationContext,"Audio Stops",Toast.LENGTH_SHORT).show()
}
}
})
}
override fun onDestroy(){
super.onDestroy()
if(mediaPlayer != null){
mediaPlayer!!.stop()
mediaPlayer!!.reset()
mediaPlayer!!.release()
mediaPlayer = null
}
}
}
uj5u.com熱心網友回復:
您不會在片段創建期間創建媒體播放器。所以在通話期間:
mediaPlayer?.setOnCompletionListener {
btnPlay.isEnabled = true
btnStop.isEnabled = false
mediaPlayer!!.stop()
mediaPlayer!!.reset()
mediaPlayer!!.release()
Toast.makeText(applicationContext, "end", Toast.LENGTH_SHORT).show()
}
mediaPlayer 始終為空。因此永遠不會設定偵聽器。
只需在創建 mediaPlayer 后將此代碼移動到 onClick 方法
uj5u.com熱心網友回復:
我嘗試了兩種方式:
btnPlay.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
mediaPlayer?.setOnCompletionListener {
btnPlay.isEnabled = true
btnStop.isEnabled = false
mediaPlayer!!.stop()
mediaPlayer!!.reset()
mediaPlayer!!.release()
Toast.makeText(applicationContext, "end", Toast.LENGTH_SHORT).show()
}
if (mediaPlayer == null) {
mediaPlayer = MediaPlayer.create(this@DetailActivity, Uri.parse(classAudio))
mediaPlayer!!.isLooping = true
mediaPlayer!!.start()
btnStop.isEnabled = true
btnPlay.isEnabled = false
Toast.makeText(applicationContext, "Audio Starts", Toast.LENGTH_SHORT).show()
} else {
mediaPlayer!!.start()
}
}
})
和
btnPlay.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
if (mediaPlayer == null) {
mediaPlayer = MediaPlayer.create(this@DetailActivity, Uri.parse(classAudio))
mediaPlayer?.setOnCompletionListener {
btnPlay.isEnabled = true
btnStop.isEnabled = false
mediaPlayer!!.stop()
mediaPlayer!!.reset()
mediaPlayer!!.release()
Toast.makeText(applicationContext, "end", Toast.LENGTH_SHORT).show()
}
mediaPlayer!!.isLooping = true
mediaPlayer!!.start()
btnStop.isEnabled = true
btnPlay.isEnabled = false
Toast.makeText(applicationContext, "Audio Starts", Toast.LENGTH_SHORT).show()
} else {
mediaPlayer!!.start()
}
}
})
但仍然不起作用..
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/311558.html
上一篇:應用呼叫javaFunction<?擴展UpboundType,Integer>物件并且不能將確切的UpboundType物件傳遞給apply()
