最近,我一直试图在我的应用程序的Android部分实现分页。为此,我从这个中型员额中获得了灵感。这个问题也是相关的。然而,我仍然被困住了:虽然我可以使代码从中等岗位上正常的应用程序,Android自动集成并不是很好的工作。
长话短说,文章中使用的技术是订阅MediaBrowser并传递分页意图。然后,调用带有options参数的onLoadChildren方法:
public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaBrowserCompat.MediaItem>> result, @NonNull Bundle options) {这是从常规应用程序中进行的。但是,当从Android Auto调用应用程序时,不带options参数的常规方法被调用:
public void onLoadChildren(@NonNull String parentId, @NonNull Result<List<MediaBrowserCompat.MediaItem>> result) {因此,无法对Android的结果进行分页。
我在这个项目上做了一些实验,这是一个非常基本的样板,用来展示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方法。有趣的是,Android在启动时调用MusicPlayerActivity,每次调用connect(),所以我肯定需要保留对connect()的调用。这一点很重要,因为这意味着我们不必尝试让Android使用MediaBrowser实例,这与我们之前的想法不同。
打开应用程序时,如下所示:
当打开Android时,它是这样的:
因此,我不知道下一步该怎么办。我能为自己做些什么吗?还是说是Android的自动bug?
谢谢!
发布于 2019-04-22 22:52:16
尽管MediaBrowserService可以处理自定义分页,但在Android中,浏览是为您处理的。参见此文档
您可以控制的是为浏览器树提供给抽屉的内容层次结构以及一些内容样式。否则,当您针对Android定制分页时,就没有什么可以做的了。
https://stackoverflow.com/questions/55049622
复制相似问题