Save the date! Android Dev Summit is coming to Sunnyvale, CA on Oct 23-24, 2019.

MediaRouteProvider

abstract class MediaRouteProvider
kotlin.Any
   ↳ androidx.mediarouter.media.MediaRouteProvider

Media route providers are used to publish additional media routes for use within an application. Media route providers may also be declared as a service to publish additional media routes to all applications in the system.

The purpose of a media route provider is to discover media routes that satisfy the criteria specified by the current MediaRouteDiscoveryRequest and publish a MediaRouteProviderDescriptor with information about each route by calling setDescriptor to notify the currently registered Callback.

The provider should watch for changes to the discovery request by implementing onDiscoveryRequestChanged and updating the set of routes that it is attempting to discover. It should also handle route control requests such as volume changes or media control intents by implementing onCreateRouteController to return a RouteController for a particular route.

A media route provider can support dynamic group that allows the user to add or remove a route from the selected route dynamically. To control dynamic group, DynamicGroupRouteController returned by onCreateDynamicGroupRouteController is used instead of RouteController.

A media route provider may be used privately within the scope of a single application process by calling MediaRouter.addProvider to add it to the local MediaRouter. A media route provider may also be made available globally to all applications by registering a MediaRouteProviderService in the provider's manifest. When the media route provider is registered as a service, all applications that use the media router API will be able to discover and used the provider's routes without having to install anything else.

This object must only be accessed on the main thread.

Summary

Nested classes

Describes properties of the route provider's implementation.

abstract

Provides control over a particular route.

abstract

Provides control over a dynamic group route.

abstract

Callback which is invoked when route information becomes available or changes.

Public constructors
<init>(@NonNull context: Context)

Creates a media route provider.

Public methods
Unit

Sets a discovery request to inform the provider about the kinds of routes that its clients would like to discover and whether to perform active scanning.

Context!

Gets the context of the media route provider.

Unit

Sets a callback to invoke when the provider's descriptor changes.

MediaRouteProviderDescriptor?

Gets the provider's descriptor.

open MediaRouteProvider.RouteController?
onCreateRouteController(@NonNull routeId: String)

Called by the media router to obtain a route controller for a particular route.

MediaRouteProvider.ProviderMetadata!

Gets some metadata about the provider's implementation.

Handler!

Gets the provider's handler which is associated with the main thread.

MediaRouteDiscoveryRequest?

Gets the current discovery request which informs the provider about the kinds of routes to discover and whether to perform active scanning.

open MediaRouteProvider.DynamicGroupRouteController?
onCreateDynamicGroupRouteController(@NonNull initialMemberRouteId: String)

Creates a DynamicGroupRouteController.

open Unit

Called by the media router when the discovery request has changed.

Unit

Sets the provider's descriptor.

Public constructors

<init>

MediaRouteProvider(@NonNull context: Context)

Creates a media route provider.

Parameters
context Context: The context.

Public methods

setDiscoveryRequest

fun setDiscoveryRequest(request: MediaRouteDiscoveryRequest!): Unit

Sets a discovery request to inform the provider about the kinds of routes that its clients would like to discover and whether to perform active scanning.

Parameters
request MediaRouteDiscoveryRequest!: The discovery request, or null if no discovery is needed at this time.

getContext

fun getContext(): Context!

Gets the context of the media route provider.

setCallback

fun setCallback(@Nullable callback: MediaRouteProvider.Callback?): Unit

Sets a callback to invoke when the provider's descriptor changes.

Parameters
callback MediaRouteProvider.Callback?: The callback to use, or null if none.

getDescriptor

@Nullable fun getDescriptor(): MediaRouteProviderDescriptor?

Gets the provider's descriptor.

The descriptor describes the state of the media route provider and the routes that it publishes. Watch for changes to the descriptor by registering a callback with setCallback.

Return
MediaRouteProviderDescriptor?: The media route provider descriptor, or null if none.

onCreateRouteController

@Nullable open fun onCreateRouteController(@NonNull routeId: String): MediaRouteProvider.RouteController?

Called by the media router to obtain a route controller for a particular route.

The media router will invoke the RouteController#onRelease method of the route controller when it is no longer needed to allow it to free its resources.

Parameters
routeId String: The unique id of the route.
Return
MediaRouteProvider.RouteController?: The route controller. Returns null if there is no such route or if the route cannot be controlled using the route controller interface.

getMetadata

fun getMetadata(): MediaRouteProvider.ProviderMetadata!

Gets some metadata about the provider's implementation.

getHandler

fun getHandler(): Handler!

Gets the provider's handler which is associated with the main thread.

getDiscoveryRequest

@Nullable fun getDiscoveryRequest(): MediaRouteDiscoveryRequest?

Gets the current discovery request which informs the provider about the kinds of routes to discover and whether to perform active scanning.

Return
MediaRouteDiscoveryRequest?: The current discovery request, or null if no discovery is needed at this time.

onCreateDynamicGroupRouteController

@Nullable open fun onCreateDynamicGroupRouteController(@NonNull initialMemberRouteId: String): MediaRouteProvider.DynamicGroupRouteController?

Creates a DynamicGroupRouteController.

It will be called from an app or MediaRouter when a single route or a single static group is selected.

Parameters
initialMemberRouteId String: initially selected route's id.
Return
MediaRouteProvider.DynamicGroupRouteController?: DynamicGroupRouteController. Returns null if there is no such route or if the route cannot be controlled using the DynamicGroupRouteController interface.

onDiscoveryRequestChanged

open fun onDiscoveryRequestChanged(@Nullable request: MediaRouteDiscoveryRequest?): Unit

Called by the media router when the discovery request has changed.

Whenever an applications calls MediaRouter#addCallback to register a callback, it also provides a selector to specify the kinds of routes that it is interested in. The media router combines all of these selectors together to generate a MediaRouteDiscoveryRequest and notifies each provider when a change occurs by calling setDiscoveryRequest which posts a message to invoke this method asynchronously.

The provider should examine the media control categories in the discovery request's selector to determine what kinds of routes it should try to discover and whether it should perform active or passive scans. In many cases, the provider may be able to save power by determining that the selector does not contain any categories that it supports and it can therefore avoid performing any scans at all.

Parameters
request MediaRouteDiscoveryRequest?: The new discovery request, or null if no discovery is needed at this time.

setDescriptor

fun setDescriptor(@Nullable descriptor: MediaRouteProviderDescriptor?): Unit

Sets the provider's descriptor.

The provider must call this method to notify the currently registered callback about the change to the provider's descriptor.

Parameters
descriptor MediaRouteProviderDescriptor?: The updated route provider descriptor, or null if none.