kotlin Exoplayer java。lang.IllegalStateException:在错误的线程上访问播放器
音频播放器。kt
class AudioPlayerImplementation(
internal val context: Application
) : AudioPlayer,
Player.Listener,
LoadEventController {
private var playerBase: ExoPlayer? = null
private val player: ExoPlayer
get() {
if (playerBase == null) {
playerBase = createPlayer(this)
}
return playerBase ?: throw IllegalStateException("Could not create an
audio player")
}
override fun play(startAtPosition: Long?) {
startAtPosition ?: return player.play()
player.seekTo(startAtPosition)
//error thrown here
player.play()
}
override fun seekTo(position: Long) {
//error thrown here
player.seekTo(position)
}
}
在同一个类中,这是函数:createPlayer
private fun createPlayer(owner: AudioPlayerImplementation): ExoPlayer {
return SimpleExoPlayer.Builder(context)
.setLoadControl(LoadController().apply {
eventController = owner
})
.build().apply {
val attr = AudioAttributes.Builder().apply {
setContentType(C.CONTENT_TYPE_MUSIC)
setUsage(C.USAGE_MEDIA)
}.build()
setAudioAttributes(attr, false)
setPriorityTaskManager(PriorityTaskManager())
addListener(owner)
}
}
当我播放任何媒体时,会出现以下错误:
java。lang.IllegalStateException:在错误的线程上访问播放器。 当前线程:“ExoPlayer:播放” 预期线程:“main”
我读到你需要使用处理器,所以我改变了兴趣:
override fun seekTo(position: Long) {
val mainThreadHandler = Handler(Looper.getMainLooper())
mainThreadHandler.post { player.seekTo(position) }
}
我无法在每个实例中编写此代码。。。有这么多的例子
注:我用刀柄。 构造和构建exoplayer实例的最佳方法
共 (0) 个答案