Как вызвать 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);
Официальная документация имеет хорошее объяснение того, как это работает в целом