android - 自动 : Showing the progress while doing a background call

标签 android android-auto

我们有一个音频应用,我们想为其添加 Android Auto 功能。该应用基本上有一个广播流列表,用户可以选择播放哪个。

为了获取流,我需要调用 Web 服务并获取流,同时我希望至少在汉堡菜单上显示不确定的进度,就像 Spotify 在加载内容时所做的那样。

此刻,如果我已经下载了流,在我的 MediaBrowserServiceCompat 上当自动调用 onLoadChildren我的Result<List<MediaBrowserCompat.MediaItem>> result对象填充有 MediaItems,如果我没有它们,我只发送一个空的 MediaItems 数组并调用 API,一旦它完成我调用 notifyChildrenChanged在服务和流列表出现,但在那之前我有一个“没有项目”的消息。

我在 Android 开发者网站上找不到设置子菜单以显示加载的方法,而且我找不到执行此操作的示例应用程序。有谁知道是否有办法,也许什么时候onGetRoot被调用是为了让 Auto 知道在调用 onGetRoot 之前它必须等待和 onLoadChildren ?我还尝试调用 API,然后调用自己 onGetRoot但它没有用。

提前致谢。

最佳答案

OnGetRoot 应该立即返回,因为它实际上没有携带任何内容。

onLoadChildren 虽然是加载内容的地方,但它支持在任何内容级别上进行异步加载。获取流时,在调用 API 之前不要发送空的 MediaItems 数组。相反,从 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(...);
            }
        });
    }
}

关于android - 自动 : Showing the progress while doing a background call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53211708/

相关文章:

android - 运行时权限不足 'adb shell'

android - 服务和 Activity 之间通信的最佳方式是什么?

Android HTC One Bottom 操作栏

android - 从广播事件切换到奥托有什么好处

android-auto - Android Automotive 支持 Android Auto 和 CarPlay

android - 如何读取 android 汽车应用程序中的车辆传感器?

java - LayoutInflater 不更新 TextView

Android Auto - 如何显式打开谷歌地图进行导航以显示在汽车屏幕上(intent.setPackage 不起作用)

android - 安卓汽车和安卓汽车的区别

android - 在 Android 自动队列中选择媒体项目没有任何作用