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