added in version 1.0.0
belongs to Maven artifact androidx.media:media:1.0.0-beta01

MediaButtonReceiver

public class MediaButtonReceiver
extends BroadcastReceiver

java.lang.Object
   ↳ android.content.BroadcastReceiver
     ↳ androidx.media.session.MediaButtonReceiver


A media button receiver receives and helps translate hardware media playback buttons, such as those found on wired and wireless headsets, into the appropriate callbacks in your app.

You can add this MediaButtonReceiver to your app by adding it directly to your AndroidManifest.xml:

 <receiver android:name="androidx.media.session.MediaButtonReceiver" >
   <intent-filter>
     <action android:name="android.intent.action.MEDIA_BUTTON" />
   </intent-filter>
 </receiver>
 
This class assumes you have a Service in your app that controls media playback via a MediaSessionCompat. Once a key event is received by MediaButtonReceiver, this class tries to find a Service that can handle Intent.ACTION_MEDIA_BUTTON, and a MediaBrowserServiceCompat in turn. If an appropriate service is found, this class forwards the key event to the service. If neither is available or more than one valid service/media browser service is found, an IllegalStateException will be thrown. Thus, your app should have one of the following services to get a key event properly.

Service Handling ACTION_MEDIA_BUTTON

A service can receive a key event by including an intent filter that handles Intent.ACTION_MEDIA_BUTTON:
 <service android:name="com.example.android.MediaPlaybackService" >
   <intent-filter>
     <action android:name="android.intent.action.MEDIA_BUTTON" />
   </intent-filter>
 </service>
 
Events can then be handled in Service.onStartCommand(Intent, int, int) by calling handleIntent(MediaSessionCompat, Intent), passing in your current MediaSessionCompat:
 private MediaSessionCompat mMediaSessionCompat = ...;

 public int onStartCommand(Intent intent, int flags, int startId) {
   MediaButtonReceiver.handleIntent(mMediaSessionCompat, intent);
   return super.onStartCommand(intent, flags, startId);
 }
 
This ensures that the correct callbacks to MediaSessionCompat.Callback will be triggered based on the incoming KeyEvent.

Note: Once the service is started, it must start to run in the foreground.

MediaBrowserService

If you already have a MediaBrowserServiceCompat in your app, MediaButtonReceiver will deliver the received key events to the MediaBrowserServiceCompat by default. You can handle them in your MediaSessionCompat.Callback.

Summary

Public constructors

MediaButtonReceiver()

Public methods

static PendingIntent buildMediaButtonPendingIntent(Context context, ComponentName mbrComponent, long action)

Creates a broadcast pending intent that will send a media button event.

static PendingIntent buildMediaButtonPendingIntent(Context context, long action)

Creates a broadcast pending intent that will send a media button event.

static KeyEvent handleIntent(MediaSessionCompat mediaSessionCompat, Intent intent)

Extracts any available KeyEvent from an Intent.ACTION_MEDIA_BUTTON intent, passing it onto the MediaSessionCompat using MediaControllerCompat.dispatchMediaButtonEvent(KeyEvent), which in turn will trigger callbacks to the MediaSessionCompat.Callback registered via MediaSessionCompat.setCallback(MediaSessionCompat.Callback).

void onReceive(Context context, Intent intent)

Inherited methods

Public constructors

MediaButtonReceiver

added in version 1.0.0
public MediaButtonReceiver ()

Public methods

buildMediaButtonPendingIntent

added in version 1.0.0
public static PendingIntent buildMediaButtonPendingIntent (Context context, 
                ComponentName mbrComponent, 
                long action)

Creates a broadcast pending intent that will send a media button event. The action will be translated to the appropriate KeyEvent, and sent to the provided media button receiver via the pending intent. The action should be one of the following:

Parameters
context Context: The context of the application.

mbrComponent ComponentName: The full component name of a media button receiver where you want to send this intent.

action long: The action to be sent via the pending intent.

Returns
PendingIntent Created pending intent, or null if the given component name is null or the action is unsupported/invalid.

buildMediaButtonPendingIntent

added in version 1.0.0
public static PendingIntent buildMediaButtonPendingIntent (Context context, 
                long action)

Creates a broadcast pending intent that will send a media button event. The action will be translated to the appropriate KeyEvent, and it will be sent to the registered media button receiver in the given context. The action should be one of the following:

Parameters
context Context: The context of the application.

action long: The action to be sent via the pending intent.

Returns
PendingIntent Created pending intent, or null if cannot find a unique registered media button receiver or if the action is unsupported/invalid.

handleIntent

added in version 1.0.0
public static KeyEvent handleIntent (MediaSessionCompat mediaSessionCompat, 
                Intent intent)

Extracts any available KeyEvent from an Intent.ACTION_MEDIA_BUTTON intent, passing it onto the MediaSessionCompat using MediaControllerCompat.dispatchMediaButtonEvent(KeyEvent), which in turn will trigger callbacks to the MediaSessionCompat.Callback registered via MediaSessionCompat.setCallback(MediaSessionCompat.Callback).

Parameters
mediaSessionCompat MediaSessionCompat: A MediaSessionCompat that has a MediaSessionCompat.Callback set.

intent Intent: The intent to parse.

Returns
KeyEvent The extracted KeyEvent if found, or null.

onReceive

added in version 1.0.0
public void onReceive (Context context, 
                Intent intent)

Parameters
context Context

intent Intent