Текущая реализация
Наше приложение использует MediaBrowserServiceCompat с MediaSessionCompat для интеграции Android Auto:
Код: Выделить всё
// From MediaSessionController.java
public class MediaSessionController {
private final MediaSessionCompat mediaSession;
public MediaSessionController(final Context context, final PlaybackController playbackController) {
mediaSession = new MediaSessionCompat(context, logger.getName());
mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
mediaSession.setCallback(new MediaSessionCallback());
// ... other setup
}
}
Мы заполняем очередь, используя стандартный подход MediaSession:
Код: Выделить всё
private void updateMediaSessionQueue(boolean forceUpdate) {
final PlaybackConfig playbackConfig = playbackController.getPlayback().getPlaybackConfig();
final int previewCount = playbackConfig.getPreviewCount();
// Deactivate queue if preview count is 0 or playback is not on demand
if (previewCount
playbackHandler.handleMediaBrowseRequest(autoMediaItem)
// Queue is populated automatically, but button cannot be customized
}
}
}
}
- Пользовательские действия и встроенные элементы управления: хотя addCustomAction() работает для кнопок перемешивания/рейтинга, эквивалента для кнопки очереди не существует.
- Архитектура MediaSession Ограничение: кнопка очереди представляет собой управляемый системой элемент пользовательского интерфейса, который Android Auto отображает на основе вызовов setQueue().
- Нет API-интерфейсов настройки для конкретных очередей: я не нашел таких методов, как setQueueButtonIcon() или подобных в MediaSessionCompat.
Код: Выделить всё
// Attempt 1: Custom action to replace queue (doesn't work - shows as additional button)
builder.addCustomAction("CUSTOM_QUEUE", "Queue", R.drawable.custom_queue_icon);
// Attempt 2: Trying to intercept queue button (no such callback exists)
// onQueueButtonClicked() - doesn't exist
// Attempt 3: Modifying queue items to affect button (no effect on button appearance)
MediaDescriptionCompat.Builder builder = new MediaDescriptionCompat.Builder();
builder.setExtras(customExtras); // Doesn't affect queue button
- Поддерживается ли настройка кнопки очереди? Могу ли я изменить значок или поведение кнопки очереди в Android Auto?
- Существуют ли недокументированные API? Какие-либо скрытые методы или обходные пути для настройки кнопки очереди?
- Является ли это ограничением платформы? Является ли кнопка очереди намеренно ненастраиваемой по соображениям согласованности/безопасности?
- Альтернативные подходы? Должен ли я отключить встроенную очередь и реализовать индивидуальное решение?
- AndroidX Media 1.x
- + MediaSessionCompat
Код: Выделить всё
MediaBrowserServiceCompat - Android Auto (как головное устройство, так и мобильное устройство)
- Таргетинг API 33+
Подробнее здесь: https://stackoverflow.com/questions/797 ... -to-modify
Мобильная версия