如何解决MediaSession 没有从 MediaStyle 通知中获得暂停
我正在开发一个应用程序,允许用户从网络流式传输播客。这是我第一次使用背景音频组件(即 MediaSession
、Mediabroswer
和 MediaController
),我有点困惑。
用户可以通过 Fragment 和通知来控制播放器。但是,虽然从 Fragment 我可以播放和停止媒体播放器,但在通知中只有播放按钮在工作,而暂停按钮似乎没有效果。老实说,我不明白为什么...
androidx.media.app.NotificationCompat.MediaStyle mediaStyle = new androidx.media.app.NotificationCompat.MediaStyle();
if(play){
builder.addAction(new NotificationCompat.Action(android.R.drawable.ic_media_pause,"Pause",MediaButtonReceiver.buildMediaButtonPendingIntent(
service,PlaybackStateCompat.ACTION_PLAY_PAUSE)));
builder.setStyle(mediaStyle.setShowActionsInCompactView(0)
.setMediaSession(mediaSession.getSessionToken()));
service.startForeground(2,builder.build());
}else{
builder.addAction(new NotificationCompat.Action(android.R.drawable.ic_media_play,"Play",PlaybackStateCompat.ACTION_PLAY)));
builder.setStyle(mediaStyle.setShowActionsInCompactView(0)
.setMediaSession(mediaSession.getSessionToken()));
notificationmanagerCompat notificationmanager = notificationmanagerCompat.from(service);
notificationmanager.notify(2,builder.build());
service.stopForeground(false);
}
这是我的MediaSessionCompat.Callback
的一部分:
@Override
public void onPlay() {
super.onPlay();
if(isAudioFocusHold()) {
mediaSession.setActive(true);
setmediaplaybackState(PlaybackStateCompat.STATE_PLAYING);
if(preparedplayer && mediaPlayer != null){
Notifications.createPlayerNotification(service,mediaSession,true);
if(!mediaPlayer.isPlaying()) mediaPlayer.start();
updateCurrentPosition();
}
}
}
@Override
public void onPause() {
super.onPause();
if(mediaPlayer.isPlaying()){
Notifications.createPlayerNotification(service,false);
mediaPlayer.pause();
stopPlaybackStateUpdate();
setmediaplaybackState(PlaybackStateCompat.STATE_PAUSED);
}
}
这是 setmediaplaybackState()
方法:
public void setmediaplaybackState(int state) {
PlaybackStateCompat.Builder playbackStateBuilder = new PlaybackStateCompat.Builder();
playbackStateBuilder.setActions(PlaybackStateCompat.ACTION_PLAY_PAUSE |
PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_PLAY |
PlaybackStateCompat.ACTION_STOP);
playbackStateBuilder.setState(state,PlaybackStateCompat.PLAYBACK_POSITION_UNKNowN,0);
mediaSession.setPlaybackState(playbackStateBuilder.build());
}
这就是我从 Fragment 控制播放的方式:
private void switchMediaController(){
if(mCurrentState == null || mCurrentState == STATE_PAUSED) {
MediaControllerCompat.getMediaController(activity).getTransportControls().play();
mCurrentState = STATE_PLAYING;
}else{
if(MediaControllerCompat.getMediaController(activity).getPlaybackState().getState() == PlaybackStateCompat.STATE_PLAYING) {
MediaControllerCompat.getMediaController(activity).getTransportControls().pause();
}
mCurrentState = STATE_PAUSED;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。