有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案