首页> 疑难解答
使用mediaPlayer.release()时mediaPlayer崩溃
withpy
2021-06-18
简介我们有RecyclerView与儿歌的列表,当你点击一首歌它带你到另一个活动mediaPlayer ..问题是当我播放一首歌然后使用后面的歌曲停止...
我们有RecyclerView与儿歌的列表,当你点击一首歌它带你到另一个活动mediaPlayer ..问题是,当我播放一首歌,然后使用返回底部歌曲停止,这是好的,应用程序停止这个是问题,但是当我评论//mediaPlayer.release()时,应用程序运行良好它没有崩溃,歌曲只在我回去时停止,但问题是当我从RecyclerView中选择另一首歌并单击PlayBotton时歌曲从一开始就开始,但SeekBar寻求结束并且不动。有没有人知道如何解决这个问题?
我试过但在Try和Catch之间的mediaPlayer.release()但问题仍然相同。
class ChildrenSongsPreview : AppCompatActivity() {
private var handler = Handler()
var mediaPlayer: MediaPlayer? = null
private var startTime = 0.0
private var finalTime = 0.0
private var updateSongTime = object : Runnable {
override fun run() {
startTime = mediaPlayer?.currentPosition!!.toDouble()
txt_playing_duration.text = String.format(
"%d:%d", TimeUnit.MILLISECONDS.toMinutes(startTime.toLong()),
TimeUnit.MILLISECONDS.toSeconds(startTime.toLong()) -
TimeUnit.MINUTES.toSeconds(
TimeUnit.MILLISECONDS.toMinutes(startTime.toLong())
)
)
songs_seekbar.progress = startTime.toInt()
handler.postDelayed(this, 100)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_children_songs_preview)
var pos = intent.getIntExtra("KEY_SONG", 0)
var song_ID: Int = R.raw.zahab_elel
when (pos) {
0 -> {
song_ID = R.raw.mama_zmanha_gaya
txt_song_name_preview.text = "ماما زمانها جاية"
}
1 -> {
song_ID = R.raw.zahab_elel
txt_song_name_preview.text = "ذهب الليل"
}
2 -> {
song_ID = R.raw.gdo_ali
txt_song_name_preview.text = "جدو علي"
}
3 -> {
song_ID = R.raw.ebre2_shay
txt_song_name_preview.text = "إبريق الشاي"
}
}
var position = 0
mediaPlayer = MediaPlayer.create(this, song_ID)
//set song duration
finalTime = mediaPlayer?.duration!!.toDouble()
txt_song_duration.text = String.format(
"%d:%d",
TimeUnit.MILLISECONDS.toMinutes(finalTime.toLong()),
TimeUnit.MILLISECONDS.toSeconds(finalTime.toLong()) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(finalTime.toLong()))
)
btn_play.setOnClickListener {
mediaPlayer?.seekTo(position)
mediaPlayer?.start()
btn_play.visibility = View.GONE
btn_pause.visibility = View.VISIBLE
if (oneTimeOnly == 0) {
songs_seekbar!!.max = finalTime.toInt()
oneTimeOnly = 1
}
songs_seekbar!!.progress = startTime.toInt()
handler.postDelayed(updateSongTime, 100)
}
btn_pause.setOnClickListener {
position = mediaPlayer?.currentPosition!!
mediaPlayer?.pause()
btn_pause.visibility = View.GONE
btn_play.visibility = View.VISIBLE
}
btn_stop.setOnClickListener {
mediaPlayer?.stop()
position = 0
btn_pause.visibility = View.GONE
btn_play.visibility = View.VISIBLE
mediaPlayer = MediaPlayer.create(this, song_ID)
}
mediaPlayer?.setOnCompletionListener {
position = 0
btn_pause.visibility = View.GONE
btn_play.visibility = View.VISIBLE
mediaPlayer = MediaPlayer.create(this, song_ID)
}
songs_seekbar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, p: Int, fromUser: Boolean) {
if (fromUser) {
position = p
}
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
mediaPlayer?.seekTo(position)
}
})
}
override fun onDestroy() {
super.onDestroy()
mediaPlayer?.stop()
mediaPlayer?.release()
}
companion object {
var oneTimeOnly = 0
}
}
投票
媒体播放器实例也应该在onDestroy()
发布
override fun onDestroy() {
mediaPlayer?.release()
mediaPlayer = null
super.onDestroy()
}
相关文章
-
magento 2以编程方式基于规则生成优惠券代码
我在Magento 2中创建了一条规则,例如10%折扣,此规则使用自动生成的优惠券代码,而不是预先指定的代码。我想知道如何根据规则生成代码...
-
最简单的隐藏和显示svg的方法?
我正在使用角度7.我有2个svgs:一个是黑色的,我希望在它被盘旋时显示另一个颜色。这是我的测试片段:来自'@ angular / core'的import {Component}; ...
-
注册脚本不再将用户插入表中,也不允许登录
注册成员并允许他们登录(更新表等)都工作正常,直到我最近做出这个改变。基本上说,如果这个人登录检查他们是否是会员或......
-
保存天文台时间?
我想将我的android studio计时器的时间保存在一个可在应用程序内访问的txt文件中。 (例如,单击“保存”按钮,计时器的值将保存在txt中...
-
隐藏后阶段没有开始
我想每5秒显示一次隐藏表格。当形式被隐藏 - 它不再显示。我不明白为什么会这样。父root = FXMLLoader.load(getClass()。getResource(“sample.fxml”)); primaryStage ....
-
在一定时间之前强制玩家到GetKeyUp
所以我正在研究这个2D跑步者并且我正在使用transform.position函数,但是我注意到这使得Unity中的引力不起作用。我仍然希望它工作,所以我设置了这个人工...