e_o*_*ori 5 android android-auto
我们有一个音频应用程序,我们想为其添加 Android Auto 功能。该应用程序基本上有一个广播流列表,用户可以选择播放哪一个。
为了获取流,我需要调用 Web 服务并获取流,而在发生这种情况时,我希望至少在汉堡菜单上显示不确定的进度,就像 Spotify 在加载内容时所做的那样。
此时如果我已经下载了流,在我的MediaBrowserServiceCompat自动调用时,onLoadChildren我的Result<List<MediaBrowserCompat.MediaItem>> result对象填充了 MediaItems,如果我没有它们,我只发送一个空的 MediaItems 数组并调用 API,一旦它完成我调用notifyChildrenChanged在服务和流列表出现,但在那之前我有一个“没有项目”的消息。
我在 Android 开发人员网站上找不到设置子菜单以显示加载的方法,我找不到执行此操作的示例应用程序。没有人知道是否有办法,说不定什么时候onGetRoot被调用,让自动知道它调用之前等待onGetRoot和onLoadChildren?我也尝试调用 API 然后调用自己,onGetRoot但它没有用。
提前致谢。
OnGetRoot 应该立即返回,因为它实际上不携带任何内容。
onLoadChildren 是加载内容的地方,它支持任何内容级别的异步加载。获取流时,请不要在调用 API 之前发送空的 MediaItem 数组。相反,从 onLoadChildren() 中获取流。调用 results.detach(),在另一个线程中获取流,然后在内容可用时调用 results.sendResult。媒体内容浏览器将在等待异步 sendResult 调用时显示进度微调器
像这样的事情会成功。
@Override
public void onLoadChildren(@NonNull final String parentMediaId, @NonNull final Result<List<MediaItem>> result) {
if (/* if music library is ready, return immediately */) {
result.sendResult(getChildren(parentMediaId, getResources()));
} else {
// otherwise, return results when the streams are ready
result.detach();
someMusicProvider.retrieveMediaAsync(new MusicProvider.Callback() {
@Override
public void onStreamsReady(boolean success) {
result.sendResult(...);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
398 次 |
| 最近记录: |