向Android媒体会话添加自定义用户操作



我正试图将自定义用户操作添加到我的媒体会话中,以便它显示在android自动操作卡上,但我似乎无法使其工作。我环顾四周,但没有发现太多关于如何显式添加自定义操作的信息。我已经包含了所有相关的代码,这些代码是我正在尝试实现的唯一自定义操作的实现的一部分。

我想知道我错过了什么和/或做错了什么。非常感谢。

public class MyMediaBrowserService extends MediaBrowserServiceCompat{
//Variables Declared here ...
@Override
public void onCreate(){
mediaSession = new MediaSessionCompat(this, TAG);
mediaSessionCallback = new MyMediaSessionCallback();
mediaSession.setCallback(mediaSessionCallback);
// Enable callbacks from MediaButtons and TransportControls
mediaSession.setFlags(
MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
MediaSessionCompat.Token token = mediaSession.getSessionToken();
setSessionToken(token);
mediaNotificationManager = new MediaNotificationManager(this);
// Set an initial PlaybackState with ACTION_PLAY, so media 
buttons can start the player
mStateBuilder = new PlaybackStateCompat.Builder()
.setActions(
PlaybackStateCompat.ACTION_PLAY |
PlaybackStateCompat.ACTION_PAUSE |
PlaybackStateCompat.ACTION_SKIP_TO_NEXT |
PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS)
.addCustomAction(CUSTOM_ACTION_REPEAT, "Repeat Mode", 
R.drawable.ic_repeat_none);
mediaSession.setPlaybackState(mStateBuilder.build());
mediaSession.setActive(true);
mediaPlayer = new DefaultMediaPlayer(this, 
new DefaultMediaPlaybackListener());
}
...
public class MyMediaSessionCallback extends 
MediaSessionCompat.Callback {
//Variables Declared here ...
// The following methods are actually implemented in the 
//  project, and functions as they are supposed to.
// They are mentioned here for the sake of showing their 
//  existence with relations to the PlaybackStateCompat set 
//  above.
@Override public void onAddQueueItem(MediaDescriptionCompat 
description) { ... }
@Override public void onRemoveQueueItem(MediaDescriptionCompat 
description) { ... }
@Override public void onPlayFromMediaId(String mediaId, 
Bundle extras) { .... }
@Override public void onPlay() { ... }
@Override public void onPause() { ... }
@Override public void onStop() { ... }
@Override public void onSkipToNext() { ... }
@Override public void onSkipToPrevious() { ... }
@Override public void onSeekTo(long pos) { ... }
// This is the actual implement of the onCustomAction method
// I never got it working so I figured I'll start by logging it 
//  first before spending time coding it 
@Override
public void onCustomAction(String action, 
Bundle extras) {
if(action.equals(CUSTOM_ACTION_REPEAT))
Log.e(TAG, "Custom action is REPEAT");

}
...
}
}

为了添加自定义操作并给定PlayBackStateCompat.Builder,您可以按如下方式添加自定义操作:

mStateBuilder.addCustomAction(
new PlaybackStateCompat.CustomAction.Builder(
CUSTOM_ACTION_REPLAY,
getString(R.string.custom_action_replay),
R.drawable.ic_replay).build()
);

然后,您必须添加代码来处理自定义操作,就像您已经做的那样。上面的代码应该可以工作,并在Android Auto上正确显示操作,我用它来显示自定义操作。希望这有帮助,即使我有点迟到

最新更新