用surface和mediaplaer实现视频播放器的时候出现的bug,查了一晚上,太折磨了
以下为kotlin代码
报错内容:
java.lang.IllegalArgumentException: The surface has been released
解决方法:
1.推荐
mediaPlayer.setDisplay(surfaceView.holder)
mediaPlayer.start()
把这两个放在mediaPlay的onPrepare监听器里
2.加个按钮,点击后再调用start
原因:很多博客详细分析过,主要就是surface周期和activity的onCreate周期不同步,然后holder就出了问题
完整kotlin代码
fun play() {
try {
mediaPlayer.reset()
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)
mediaPlayer.setDataSource(this,
Uri.parse("android.resource://"+this.packageName+"/"+R.raw.vedio))
}catch (e:IOException){
e.printStackTrace()
}
try {
mediaPlayer.prepare()
}catch (e:IOException){
e.printStackTrace()
}
mediaPlayer.setOnPreparedListener {
mediaPlayer.setDisplay(surfaceView.holder)
mediaPlayer.start()
}
mediaPlayer.setOnCompletionListener {
Toast.makeText(this,"end",Toast.LENGTH_SHORT).show()
}
}