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 回の呼び出し後に発生します。