首页 > 解决方案 > 如何在 Android Auto 的媒体浏览器中更新默认错误文本?

问题描述

我正在开发 Android 自动媒体应用程序,当由于网络错误等原因加载项目失败时,我想设置自定义错误文本(或自定义背景文本)。默认情况下,只有两种极端情况:

  1. onLoadChildren()当 MediaBrowserServiceCompat 的方法返回一个空列表时,将显示“无项目”文本。
  2. 带有感叹号图标的通用“出现问题”文本是发生错误的时间。

有什么办法可以更新一个或另一个?到目前为止,我发现只有一个媒体应用程序为 Android auto 中的第二个场景显示自定义消息。那是带有消息“Spotify 当前设置为离线”的 Spotify,尽管默认的错误图标是相同的。我在文档中找不到任何提及错误消息的MediaBrowserServiceCompat内容,我将不胜感激。

到目前为止,我尝试设置媒体会话的错误状态并返回 null 作为结果:

@Override
    public void onLoadChildren(@NonNull final String parentId, @NonNull final Result<List<MediaBrowserCompat.MediaItem>> result) {
        // some logic ...

        PlaybackStateCompat errorState = new PlaybackStateCompat.Builder()
                .setActions(PlaybackStateCompat.ACTION_STOP)
                .setErrorMessage(PlaybackStateCompat.ERROR_CODE_UNKNOWN_ERROR, "MY CUSTOM ERROR TEXT!").build();
        mediaSession.setPlaybackState(errorState);
        // result.sendError(new Bundle()); // <- does nothing
        // result.sendResult(Collections.emptyList()); // default "No items" message will be displayed
        result.sendResult(null);  // <-- this should trigger an error
}

MediaBrowserServiceCompat.Result有一个方法sendError,但只能在自定义操作上调用(根据文档),并且没有如何使用它的示例:

https://developer.android.com/reference/androidx/media/MediaBrowserServiceCompat.Result.html#sendError(android.os.Bundle)

标签: androidandroid-auto

解决方案


我找到了答案,MediaSessionCompat 的播放状态应该更新为 STATE_ERROR。这是显示错误的示例代码:

void setErrorState(String errorMessage) {
        PlaybackStateCompat playbackState = new PlaybackStateCompat.Builder()
                .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f)
                .setErrorMessage(
                        PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED,
                        errorMessage
                )
                .build();
        mediaSession.setPlaybackState(playbackState);
    }

推荐阅读