如何为 Android Auto 更新媒体浏览器中的默认错误文本?

How to update default error text in media browser for Android Auto?

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

  1. "No items" 文本将在 MediaBrowserServiceCompat 的 onLoadChildren() 方法 returns 为空列表时显示。
  2. 发生错误时,带有感叹号图标的通用 "Something went wrong" 文本。

有什么方法可以更新一个或另一个吗? 到目前为止,我发现只有一个媒体应用程序在 Android 自动显示第二种情况的自定义消息。这是带有消息 "Spotify is currently set to offline" 的 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)

我找到答案了,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);
    }