如何在通知中获取可查找的进度条,以编程方式更新 android q 中的媒体播放器实例?

Adi*_*nke 5 spotify android-mediaplayer exoplayer android-10.0 android-notification.mediastyle

Android Q 及更高版本提供了在通知中包含可查找进度条的功能。我正在创建一个从外部存储播放音频文件的应用程序。

MediaPlayer控制进度条

我想实现如图所示的进度条。

问题是我已经实现了一个进度条,它是可搜索的,但当用户搜索到搜索栏上的特定位置时,它不会更新媒体播放器。

我的进度条实现

代码

以下代码设置元数据

mediaSession.setMetadata(MediaMetadataCompat.fromMediaMetadata(new MediaMetadata.Builder().putString(MediaMetadata.METADATA_KEY_TITLE, title) .putLong(MediaMetadata.METADATA_KEY_DURATION, Long.parseLong(listSongs.get(position).getmDuration())).build()));

以下代码检查媒体播放器是否正在播放并设置 PlaybackState

 if(mediaPlayer!=null) {


                if(!mediaPlayer.isPlaying()){
                     playbackState = PlaybackState.STATE_PLAYING;
                }
                else{
                   playbackState =  PlaybackState.STATE_PAUSED;
                }

         mBuilder =  new PlaybackState.Builder()
                .setState(playbackState
                        , musicService.getCurrentPosition()
                        , 1
                )
                .setActions(PlaybackState.ACTION_SEEK_TO| 
                        PlaybackState.ACTION_PAUSE |
                        PlaybackState.ACTION_SKIP_TO_NEXT |
                        PlaybackState.ACTION_SKIP_TO_PREVIOUS |
                        PlaybackState.ACTION_PLAY_PAUSE)
                 ;




        mediaSession.setPlaybackState(PlaybackStateCompat.fromPlaybackState(mBuilder.build()));
        mediaSession.setActive(true);
Run Code Online (Sandbox Code Playgroud)

小智 0

到目前为止,您的代码没问题。您只是没有设置 mediasession 回调,以便在跟踪(移动)搜索栏时检索位置(长)。您还可以从回调中获取其他方法

在您的服务类中设置元数据之后添加以下代码

mediasession.setCallback(new Mediasession.Callback(){

//you should be able to get the onSeekTo method from above ..then just pass the long to a integer before updating your mediaPlayer 
}
Run Code Online (Sandbox Code Playgroud)