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

冷暖自知 提交于 2019-12-08 17:38:13

问题


I am working on the Android auto media app and I want to set custom error text (or custom background text) when loading items has failed due to a network error etc. By default there are only two edge case scenarios:

  1. "No items" text will be displayed when MediaBrowserServiceCompat's onLoadChildren() method returns an empty list.
  2. Generic "Something went wrong" text with an exclamation mark icon is when an error occurred.

Is there any way I can update one or another? So far I found only one media app that displays a custom message for the second scenario in Android auto. That's Spotify with a message "Spotify is currently set to offline", though the default error icon is the same. I couldn't find any mentioning of the error messages in MediaBrowserServiceCompat documentation and will appreciate any help.

What I've tried so far setting the error state for the media session and returning a null as a result:

@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 has a method sendError but it should only be called on custom action (according to the documentation) and there are no examples of how to use it:

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


回答1:


I found an answer, the MediaSessionCompat's playback state should be updated to the STATE_ERROR. Here is a sample code for showing an 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);
    }


来源:https://stackoverflow.com/questions/57321200/how-to-update-default-error-text-in-media-browser-for-android-auto

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!