我正在按照 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 次调用之后。