Как вызвать getDuration в mediaBrowserService из действия?

Ранее, используя boundService, это можно было легко достичь. Но с MediaBrowserService я не могу получить доступ к getDuration снаружи, без которого я не могу обновить панель поиска.

1 ответ

Решение

На MediaBrowserService, когда вы обновляете MediaMetadata, добавьте продолжительность текущего медиа.

MediaMetadataCompat.Builder metadataBuilder = new MediaMetadataCompat.Builder();
metadataBuilder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, track.durationMs);

Находясь на стороне клиента, используя MediaBrowserCompat, вы можете подключиться к MediaBrowserService и получить MediaSessionCompat.Token. С помощью токена вы можете получить MediaSessionController, откуда вы можете получить MediaMetadataCompat, который содержит информацию о текущем носителе.

int duration = (int) metadata.getLong(MediaMetadataCompat.METADATA_KEY_DURATION);

Официальная документация имеет хорошее объяснение того, как это работает в целом