3

我正在按照 android 官方应用程序构建一个简单的媒体应用程序。但就我而言,我需要从远程获取每个剪辑的 URL,然后从中创建一个mediaId,然后播放音频剪辑。这意味着我需要非常频繁地更新我的媒体数据。为了更新媒体数据列表,我正在注册自定义命令接收器,它可以正常更新数据并根据需要播放。但是在调用sendCommand特定次数(7-8)之后onCommand没有被调用。你可以检查我的实现。

从 ViewModel 调用

private fun sendCommandToService(metaData: List<ServiceMetaData>) {
        audioConnection.sendCommand(AudioService.REFRESH_AUDIO_DATA, Bundle().apply {
            putSerializable(AudioService.AUDIO_DATA, metaData as ArrayList<ServiceMetaData>)
        }) { _, _ -> }
    }

服务连接

fun sendCommand(
        command: String,
        parameters: Bundle?,
        resultCallback: ((Int, Bundle?) -> Unit)
    ) = if (mediaBrowser.isConnected) {
        mediaController.sendCommand(command, parameters, object : ResultReceiver(Handler()) {
            override fun onReceiveResult(resultCode: Int, resultData: Bundle?) {
                resultCallback(resultCode, resultData)
            }
        })
        true
    } else {
        false
    }

媒体会话连接器自定义命令接收器

override fun onCommand(
        player: Player?,
        controlDispatcher: ControlDispatcher?,
        command: String?,
        extras: Bundle?,
        callback: ResultReceiver?
    ): Boolean =
        when (command) {
            REFRESH_AUDIO_DATA -> onRefreshAudioListCommandCallback(extras ?: Bundle.EMPTY, callback)
            else -> false
        }

这种行为是间歇性的,在模拟器上我在重复相同的过程 7-8 次后遇到了这个问题,但在真实设备上,这发生在 18-20 次调用之后。

4

0 回答 0