android - 如何让Android MediaSession在显示进度时考虑播放速度

标签 android android-mediasession

我有一个 Android 应用程序可以播放一些内容。 我正在使用以下信息初始化 MediaSession 对象:

    mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
                mediaSession.setPlaybackToLocal(AudioManager.STREAM_MUSIC);
 PlaybackStateCompat.Builder sessionState = new PlaybackStateCompat.Builder();
                sessionState.setActions(PLAYBACK_STATE_TRANSPORT_CONTROL_FLAGS);
                mediaSession.setPlaybackState(sessionState.build());
                mediaSession.setCallback(BuildMediaSessionCallback(context, mediaSession));
 PlaybackStateCompat.Builder sessionState = new PlaybackStateCompat.Builder();
 sessionState.setActions(getSessionStateActions(mediaSession));

 sessionState.setState(playbackState, position, speed);
 mediaSession.setPlaybackState(sessionState.build());

mediaSession.setActive(true);

一切正常。我可以从我的汽车 BT 接收器控制播放,文件元数据已发布,但是进度条/时间会更新,就好像提供的播放速度是 1.0x,即使我发送的值是 3.0x

我能够正确更新进度条的唯一方法是每秒钟用新的播放位置调用 mediaSession.setPlaybackState(...)。 看起来 mediaSession 没有考虑速度参数。 有人知道如何进行这项工作吗?

谢谢

最佳答案

看起来你做得对,假设 speed 在这种情况下设置为 3:

sessionState.setState(playbackState, position, speed);

问题听起来像是在 UI 端,在计算播放位置时没有考虑播放速度。

long timeDelta = SystemClock.elapsedRealtime() - state.getLastPositionUpdateTime();
long currentPosition = (state.getPosition() + (timeDelta * state.getPlaybackSpeed()));

关于android - 如何让Android MediaSession在显示进度时考虑播放速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39135216/

相关文章:

android - 拔下耳机时暂停 ExoPlayer

android - 捕捉安卓媒体按钮事件

Android:NotificationCompat.MediaStyle 操作按钮不执行任何操作

android - 放置在 GalleryView 中的膨胀 ImageView 尺寸不正确

android - 无法使用 Android Studio 构建 GStreamer 教程

java - 如何使用Intent录制视频?

java - 带有 ListView 的 XYPlot 具有黑色背景而不是透明背景

java - 如何在android ImageView 中显示tomcat中本地服务器的图像

Android:关于 MediaSessionManager 和 RemoteController 我不清楚的地方

android - MediaSession 没有从 MediaStyle Notification 获得任何回调