如何解决曲目暂停时,MediaStyle通知进度栏会继续前进API 30
当我从通知中暂停时,进度条将继续播放,因为它仍在播放。如果我再按一次播放,进度条将返回到其最初暂停的位置,然后正确恢复。我暂停时就会出现问题:进度条不会停止并且一直在前进。每当我的媒体播放器检测到播放状态更改时,我首先更新PlaybackStateCompat,然后更新MediaMetadataCompat,最后显示通知。一切都以这种方式运行良好,直到我们在API 30中运行该应用程序为止,该应用程序在扩展的通知中具有进度条。在此图像中,播放状态已暂停,但进度条正在前进。
这就是我创建PlaybackStateCompat.Builder的方式。该文档说,您应该在暂停时将playbackSpeed设置为0,这正是我正在做的事情。
@Override
public PlaybackStateCompat.Builder getPlaybackState(int typeMetadata,@PlaybackStateCompat.State int playbackStateCompact,MediaInfo mediaInfo,long position) {
PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder();
switch (typeMetadata) {
case MetaDataType.MEDIAINFO:
stateBuilder.setActions(getIconButtons());
stateBuilder.setExtras(getPlaybackStateExtras(mediaInfo));
if (mediaInfo.getMediaType() == MediaInfo.MediaType.RAdio) {
stateBuilder.setState(playbackStateCompact,PlaybackStateCompat.PLAYBACK_POSITION_UNKNowN,1.0f);
} else {
if (playbackStateCompact == PlaybackStateCompat.STATE_PAUSED) {
stateBuilder.setState(playbackStateCompact,position,0.0f);
} else if (position == 0) {
stateBuilder.setState(playbackStateCompact,1.0f);
} else {
stateBuilder.setState(playbackStateCompact,1.0f,SystemClock.elapsedRealtime());
}
}
return stateBuilder;
case MetaDataType.AD:
case MetaDataType.EMPTY:
stateBuilder.setActions(PlaybackStateCompat.ACTION_PREPARE);
stateBuilder.setBufferedPosition(0);
stateBuilder.setState(PlaybackStateCompat.STATE_BUFFERING,1);
break;
}
return stateBuilder;
}
这就是我创建MediaMetadataCompat.Builder
的方式@Override
public MediaMetadataCompat.Builder getMediaCompact(int typeMetadata,MediaInfo mediaInfo) {
final MediaMetadataCompat.Builder mediaBuilder = new MediaMetadataCompat.Builder();
switch (typeMetadata) {
case MetaDataType.MEDIAINFO:
if (mediaBuilder != null) {
mediaBuilder.putString(MediaMetadataCompat.MetaDATA_KEY_MEDIA_ID,mediaInfo.getId());
mediaBuilder.putString(MediaMetadataCompat.MetaDATA_KEY_TITLE,mediaInfo.getTitle());
mediaBuilder.putString(MediaMetadataCompat.MetaDATA_KEY_ARTIST,mediaInfo.getSubtitle());
mediaBuilder.putString(MediaMetadataCompat.MetaDATA_KEY_ALBUM,mediaInfo.getAlbum());
mediaBuilder.putLong(MediaMetadataCompat.MetaDATA_KEY_DURATION,mediaInfo.getDuration());
mediaBuilder.putString(MediaMetadataCompat.MetaDATA_KEY_ALBUM_ART_URI,ImageManager.getimageUrl(mediaInfo.getCoverPhoto()));
}
break;
case MetaDataType.AD:
mediaBuilder.putString(MediaMetadataCompat.MetaDATA_KEY_MEDIA_ID,"");
mediaBuilder.putString(MediaMetadataCompat.MetaDATA_KEY_TITLE,ApaManager.getInstance().getMetadata().getString("ad_title_banner"));
mediaBuilder.putString(MediaMetadataCompat.MetaDATA_KEY_ARTIST,"");
mediaBuilder.putString(MediaMetadataCompat.MetaDATA_KEY_ALBUM,"");
mediaBuilder.putBitmap(MediaMetadataCompat.MetaDATA_KEY_ALBUM_ART,BitmapFactory.decodeResource(MyApplication.getAppContext().getResources(),R.drawable.place_holder_playlists));
break;
case MetaDataType.EMPTY:
mediaBuilder.putString(MediaMetadataCompat.MetaDATA_KEY_MEDIA_ID,"");
mediaBuilder.putString(MediaMetadataCompat.MetaDATA_KEY_ARTIST,"");
mediaBuilder.putString(MediaMetadataCompat.MetaDATA_KEY_ALBUM_ART_URI,"");
break;
}
return mediaBuilder;
}
解决方法
问题是方法getPlaybackState在调用时收到错误的@ PlaybackStateCompat.State。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。