Android Auto:通过传递Extras选项包对MediaBrowserService进行分页失败

时间:2019-03-07 17:23:52

标签: android android-bundle android-auto mediabrowserservice mediabrowser

最近,我一直在尝试在应用程序的Android Auto部分上实现分页。为此,我从Medium post中获得了启发。 This question也相关。但是,我仍然很固执:虽然我可以使Medium帖子中的代码在常规应用程序上正常工作,但Android Auto集成不能很好地工作。

长话短说,该帖子中使用的技术是订阅MediaBrowser并传递分页意图。然后,将带有options参数的onLoadChildren方法称为:

average

这在常规应用程序中有效。但是,从Android Auto调用应用程序时,将调用不带options参数的常规方法:

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

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

我对this project做了一些实验,这是一个非常基本的样板,用来显示MediaBrowser和MediaBrowserService的工作方式。我应用了以下补丁:

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

我观察到以下情况:

正常启动应用程序时,将调用带有选项Bundle的新onLoadChildren方法。有趣的是,Android Auto在启动后会调用MusicPlayerActivity,并每次都调用connect(),因此我绝对需要保留对connect()的调用。这很重要,因为这意味着我们不必像以前那样尝试获取Android Auto使用的MediaBrowser实例。

打开应用程序时,它是这样的:

  1. 调用connect()
  2. 使用选项调用onConnected回调和mMediaBrowser.subscribe(...)
  3. 使用选项调用onLoadChildren
  4. 从那时起,将对带有选项的onLoadChildren进行进一步的调用

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

  1. 调用connect()
  2. 不带选项调用onLoadChildren
  3. 使用选项调用onConnected回调和mMediaBrowser.subscribe(...)
  4. 使用选项调用onLoadChildren
  5. 从那时起,在Android Auto中点击耳机时,只会调用不带选项的onLoadChildren

因此,我不确定下一步该怎么做。我有什么可以做的,还是Android Auto的错误?

谢谢!

1 个答案:

答案 0 :(得分:0)

即使MediaBrowserService可以处理自定义分页,也可以在Android Auto中为您处理浏览。查看此documentation

您所能控制的是为浏览器树提供给抽屉的内容层次结构以及一些内容样式。否则,在定位Android Auto时,您无法做很多其他事情来自定义分页。