Android Auto: разбиение на страницы MediaBrowserService путем передачи дополнительных пакетов параметров завершается неудачно - PullRequest
0 голосов
/ 07 марта 2019

Недавно я пытался внедрить нумерацию страниц в Android-часть своего приложения.Для этого я черпал вдохновение из этого Medium post . Этот вопрос также связан.Однако я все еще застрял: хотя я могу заставить код из поста Medium работать на обычном приложении, интеграция с Android Auto работает не очень хорошо.

Короче говоря, методика, использованная в постеподписаться на MediaBrowser и передать нумерацию страниц.Затем вызывается метод onLoadChildren с аргументом options:

public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaBrowserCompat.MediaItem>> result, @NonNull Bundle options) {

Это работает из обычного приложения.Однако при вызове приложения из Android Auto вызывается обычный метод без аргумента параметров:

public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaBrowserCompat.MediaItem>> result) {

В результате невозможно разбить на страницы результаты из Android Auto.

Я провел несколько экспериментов с этим проектом , который представляет собой базовый шаблон для демонстрации работы MediaBrowser и MediaBrowserService.Я применил следующий патч:

===================================================================
--- final/src/main/java/com/example/android/musicplayercodelab/MusicPlayerActivity.java (revision d322b5a62b0da5afba209553bcccb660c12529d7)
+++ final/src/main/java/com/example/android/musicplayercodelab/MusicPlayerActivity.java (date 1551653654000)
@@ -57,7 +58,10 @@
             new MediaBrowserCompat.ConnectionCallback() {
                 @Override
                 public void onConnected() {
-                    mMediaBrowser.subscribe(mMediaBrowser.getRoot(), mSubscriptionCallback);
+                    Bundle extra = new Bundle();
+                    extra.putInt(MediaBrowserCompat.EXTRA_PAGE, 0);
+                    extra.putInt(MediaBrowserCompat.EXTRA_PAGE_SIZE, 10);
+                    mMediaBrowser.subscribe(mMediaBrowser.getRoot(), extra, mSubscriptionCallback);
                     try {
                         MediaControllerCompat mediaController =
                                 new MediaControllerCompat(
@@ -100,7 +104,7 @@
             new MediaBrowserCompat.SubscriptionCallback() {
                 @Override
                 public void onChildrenLoaded(
-                        String parentId, List<MediaBrowserCompat.MediaItem> children) {
+                        String parentId, List<MediaBrowserCompat.MediaItem> children, @NonNull Bundle options) {
                     onMediaLoaded(children);
                 }
             };
===================================================================
--- final/src/main/java/com/example/android/musicplayercodelab/MusicService.java    (revision d322b5a62b0da5afba209553bcccb660c12529d7)
+++ final/src/main/java/com/example/android/musicplayercodelab/MusicService.java    (date 1551653364000)
@@ -116,4 +117,10 @@
             final String parentMediaId, final Result<List<MediaBrowserCompat.MediaItem>> result) {
         result.sendResult(MusicLibrary.getMediaItems());
     }
+
+    @Override
+    public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaBrowserCompat.MediaItem>> result, @NonNull Bundle options) {
+        result.sendResult(MusicLibrary.getMediaItems());
+    }
+
 }

Я заметил следующее:

новый метод onLoadChildren с параметрами Bundle вызывается при нормальном запуске приложения.Интересно, что Android Auto вызывает MusicPlayerActivity при его запуске и каждый раз вызывает connect (), поэтому мне обязательно нужно сохранить вызов connect ().Это важно, потому что это означает, что нам не нужно пытаться заставить экземпляр MediaBrowser использовать Android Auto в отличие от того, что мы думали ранее.

При открытии приложения это выглядит так:

  1. Вызов для подключения ()
  2. Вызов обратного вызова onConnected и mMediaBrowser.subscribe (...) с параметрами
  3. Вызов onLoadChildren с параметрами
  4. С этого моментадальнейшие вызовы выполняются для onLoadChildren с параметрами

При открытии Android Auto это выглядит так:

  1. Вызов для подключения ()
  2. Вызов onLoadChildrenбез опций
  3. Вызов на обратный вызов onConnected и mMediaBrowser.subscribe (...) с опциями
  4. Вызов onLoadChildren с опциями
  5. С этого момента при нажатии на гарнитурув Android Auto только onLoadChildren без параметров называется

Таким образом, я не уверен, что делать дальше.Могу ли я что-то сделать на моей стороне, или это может быть ошибка Android Auto?

Спасибо!

1 Ответ

0 голосов
/ 23 апреля 2019

Несмотря на то, что MediaBrowserService может обрабатывать пользовательские нумерации страниц, просмотр выполняется для вас в Android Auto.См. Эту документацию

. То, что вы действительно контролируете, - это иерархия контента, которая предоставляется блоку для дерева браузера, а также немного стиля контента.В противном случае вы ничего не сможете сделать, чтобы настроить нумерацию страниц при таргетинге на Android Auto.

...