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:
onLoadChildren()
method returns an empty list.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)
Media browser services enable applications to browse media content provided by an application and ask the application to start playing it. They may also be used to control content that is already playing by way of a MediaSession .
android.media.session.MediaSession. Allows interaction with media controllers, volume keys, media buttons, and transport controls. A MediaSession should be created when an app wants to publish media playback information or handle media keys.
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);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With