首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android :通过传递附加选项来分页MediaBrowserService失败

Android :通过传递附加选项来分页MediaBrowserService失败
EN

Stack Overflow用户
提问于 2019-03-07 17:23:52
回答 1查看 578关注 0票数 2

最近,我一直试图在我的应用程序的Android部分实现分页。为此,我从这个中型员额中获得了灵感。这个问题也是相关的。然而,我仍然被困住了:虽然我可以使代码从中等岗位上正常的应用程序,Android自动集成并不是很好的工作。

长话短说,文章中使用的技术是订阅MediaBrowser并传递分页意图。然后,调用带有options参数的onLoadChildren方法:

代码语言:javascript
复制
public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaBrowserCompat.MediaItem>> result, @NonNull Bundle options) {

这是从常规应用程序中进行的。但是,当从Android Auto调用应用程序时,不带options参数的常规方法被调用:

代码语言:javascript
复制
public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaBrowserCompat.MediaItem>> result) {

因此,无法对Android的结果进行分页。

我在这个项目上做了一些实验,这是一个非常基本的样板,用来展示MediaBrowser和MediaBrowserService是如何工作的。我应用了以下修补程序:

代码语言:javascript
复制
===================================================================
--- 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方法。有趣的是,Android在启动时调用MusicPlayerActivity,每次调用connect(),所以我肯定需要保留对connect()的调用。这一点很重要,因为这意味着我们不必尝试让Android使用MediaBrowser实例,这与我们之前的想法不同。

打开应用程序时,如下所示:

  1. 调用连接()
  2. 调用onConnected回调和mMediaBrowser.subscribe(.)有了选择
  3. 使用选项调用onLoadChildren
  4. 从那时起,使用选项对onLoadChildren进行进一步的调用。

当打开Android时,它是这样的:

  1. 调用连接()
  2. 调用没有选项的onLoadChildren
  3. 调用onConnected回调和mMediaBrowser.subscribe(.)有了选择
  4. 使用选项调用onLoadChildren
  5. 从那时起,当在Android中点击耳机时,只有没有选项的onLoadChildren被调用

因此,我不知道下一步该怎么办。我能为自己做些什么吗?还是说是Android的自动bug?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-04-22 22:52:16

尽管MediaBrowserService可以处理自定义分页,但在Android中,浏览是为您处理的。参见此文档

您可以控制的是为浏览器树提供给抽屉的内容层次结构以及一些内容样式。否则,当您针对Android定制分页时,就没有什么可以做的了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55049622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档