首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MediaSession架构下MediaPlayer与SeekBar的Android通信

MediaSession是Android系统中提供的一个多媒体会话控制框架,用于管理媒体播放会话。它提供了一套标准的接口,使应用程序可以与系统媒体控制器(如通知栏、锁屏界面)进行交互,并能够在不同的媒体播放器之间进行切换和控制。

MediaPlayer是Android系统中用于播放音频和视频文件的核心类之一。它提供了一系列方法和事件,用于控制媒体的播放、暂停、停止、重播等操作,并且可以获取媒体的播放状态、进度等信息。

SeekBar是Android系统中的一个可拖动的进度条控件,通常用于显示和调整媒体播放器的播放进度。它可以与MediaPlayer进行通信,实现同步更新播放进度的功能。

在MediaSession架构下,MediaPlayer与SeekBar之间的通信可以通过以下步骤实现:

  1. 创建MediaSession实例并初始化:首先需要创建一个MediaSession实例,并设置回调函数,用于处理媒体播放器的各种事件(如播放、暂停、停止、进度更新等)。
  2. 创建MediaPlayer实例并设置数据源:接下来,需要创建一个MediaPlayer实例,并设置要播放的音频或视频文件的数据源。可以使用MediaPlayer的setDataSource()方法来设置数据源,可以是本地文件、网络资源或其他来源。
  3. 设置MediaPlayer的回调函数:为了接收MediaPlayer的播放状态和进度更新等信息,需要设置MediaPlayer的回调函数。可以使用MediaPlayer的setOnPreparedListener()、setOnCompletionListener()和setOnSeekCompleteListener()等方法来设置不同的回调函数。
  4. 更新SeekBar的进度:在回调函数中,可以获取到MediaPlayer的当前播放进度,然后通过SeekBar的setProgress()方法来更新SeekBar的显示进度。
  5. 实现SeekBar的拖动操作:当用户通过手势拖动SeekBar时,可以通过SeekBar的setOnSeekBarChangeListener()方法设置监听器,以便在用户拖动时获取SeekBar的当前进度,并将其传递给MediaPlayer进行相应的操作(如seekTo()方法来实现跳转播放)。
  6. 控制MediaPlayer的播放操作:当用户点击播放、暂停、停止按钮时,可以通过MediaSession的回调函数来处理对应的事件,并调用MediaPlayer的相应方法来实现媒体的播放控制。

MediaSession架构下MediaPlayer与SeekBar的Android通信示例代码如下:

代码语言:txt
复制
// 创建MediaSession实例
MediaSessionCompat mediaSession = new MediaSessionCompat(context, "MediaSession");

// 设置MediaSession的回调函数
mediaSession.setCallback(new MediaSessionCompat.Callback() {
    @Override
    public void onPlay() {
        mediaPlayer.start();
    }

    @Override
    public void onPause() {
        mediaPlayer.pause();
    }

    @Override
    public void onStop() {
        mediaPlayer.stop();
    }

    @Override
    public void onSeekTo(long pos) {
        mediaPlayer.seekTo((int) pos);
    }
});

// 创建MediaPlayer实例并设置数据源
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(dataSource);

// 设置MediaPlayer的回调函数
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        // 媒体准备完成后开始播放
        mp.start();
    }
});

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        // 媒体播放完成后的处理
    }
});

mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
    @Override
    public void onSeekComplete(MediaPlayer mp) {
        // 跳转播放完成后的处理
    }
});

// 更新SeekBar的进度
mediaPlayer.setOnProgressUpdateListener(new MediaPlayer.OnProgressUpdateListener() {
    @Override
    public void onProgressUpdate(MediaPlayer mp, int progress, boolean fromUser) {
        seekBar.setProgress(progress);
    }
});

// 实现SeekBar的拖动操作
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if (fromUser) {
            mediaPlayer.seekTo(progress);
        }
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // 开始拖动SeekBar时的处理
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // 停止拖动SeekBar时的处理
    }
});

// 控制MediaPlayer的播放操作
mediaSession.getController().getTransportControls().play();
mediaSession.getController().getTransportControls().pause();
mediaSession.getController().getTransportControls().stop();
mediaSession.getController().getTransportControls().seekTo(position);

以上是在MediaSession架构下,MediaPlayer与SeekBar的Android通信的基本流程和示例代码。具体的应用场景和推荐的腾讯云相关产品和产品介绍链接地址,可以根据具体需求和场景进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 《移动互联网技术》第九章 感知与多媒体: 了解质感设计的基本原则和设计方法

    《移动互联网技术》课程是软件工程、电子信息等专业的专业课,主要介绍移动互联网系统及应用开发技术。课程内容主要包括移动互联网概述、无线网络技术、无线定位技术、Android应用开发和移动应用项目实践等五个部分。移动互联网概述主要介绍移动互联网的概况和发展,以及移动计算的特点。无线网络技术部分主要介绍移动通信网络(包括2G/3G/4G/5G技术)、无线传感器网络、Ad hoc网络、各种移动通信协议,以及移动IP技术。无线定位技术部分主要介绍无线定位的基本原理、定位方法、定位业务、数据采集等相关技术。Android应用开发部分主要介绍移动应用的开发环境、应用开发框架和各种功能组件以及常用的开发工具。移动应用项目实践部分主要介绍移动应用开发过程、移动应用客户端开发、以及应用开发实例。 课程的教学培养目标如下: 1.培养学生综合运用多门课程知识以解决工程领域问题的能力,能够理解各种移动通信方法,完成移动定位算法的设计。 2.培养学生移动应用编程能力,能够编写Andorid应用的主要功能模块,并掌握移动应用的开发流程。 3. 培养工程实践能力和创新能力。  通过本课程的学习应达到以下目的: 1.掌握移动互联网的基本概念和原理; 2.掌握移动应用系统的设计原则; 3.掌握Android应用软件的基本编程方法; 4.能正确使用常用的移动应用开发工具和测试工具。

    01

    Android开发笔记(一百二十六)自定义音乐播放器

    在Android手机上面,音频的处理比视频还要复杂,这真是出人意料。在前面的博文《Android开发笔记(五十七)录像录音与播放》中,介绍了视频/音频的录制与播放,其中录像用的是MediaRecorder类,播放用的是MediaPlayer类。虽然Android还提供了专门的视频视图VideoView,但是该控件并非新的东西,而是继承了MediaRecorder和MediaPlayer,所以严格来说,Android上面只有一种视频的录制和播放方式。可是音频就大不一样了,Android提供了两种录音方式,以及至少三种常用的播音方式。两种录音方式分别是MediaRecorder类和AudioRecord类,而播音方式包括MediaPlayer类、AudioTrack类和SoundPool类,它们的使用场合各有千秋,且待笔者下面细细道来。 首先是MediaRecorder与MediaPlayer,这对组合即可用于录像,也可单独录制音频。它们处理的音频文件是压缩过的编码文件,通常用于录制和播放音乐,是最经常用到的。MediaRecorder与MediaPlayer在处理音频和视频时,整体流程是一样的,只有在部分方法的调用上有所差异,下面分别把录音/播音有关的方法列出来。 MediaRecorder的录音相关方法: reset : 重置录制资源 prepare : 准备录制 start : 开始录制 stop : 结束录制 release : 释放录制资源 setOnErrorListener : 设置错误监听器。可监听服务器异常以及未知错误的事件。 setOnInfoListener : 设置信息监听器。可监听录制结束事件,包括达到录制时长或者达到录制大小。 setAudioSource : 设置音频来源。一般使用麦克风AudioSource.MIC。 setOutputFormat : 设置媒体输出格式。OutputFormat.AMR_NB表示窄带格式,OutputFormat.AMR_WB表示宽带格式,AAC_ADTS表示高级的音频传输流格式。该方法要在setVideoEncoder之前调用,不然调用setAudioEncoder时会报错“java.lang.IllegalStateException”。 setAudioEncoder : 设置音频编码器。AudioEncoder.AMR_NB表示窄带编码,AudioEncoder.AMR_WB表示宽带编码,AudioEncoder.AAC表示低复杂度的高级编码,AudioEncoder.HE_AAC表示高效率的高级编码,AudioEncoder.AAC_ELD表示增强型低延迟的高级编码。 注意:setAudioEncoder应在setOutputFormat之后执行,否则会出现“setAudioEncoder called in an invalid state(2)”的异常。 setAudioSamplingRate : 设置音频的采样率,单位赫兹(Hz)。该方法为可选,AMRNB默认8khz,AMRWB默认16khz。 setAudioChannels : 设置音频的声道数。1表示单声道,2表示双声道。该方法为可选 setAudioEncodingBitRate : 设置音频每秒录制的字节数。越大则音频越清晰。该方法为可选 setMaxDuration : 设置录制时长。单位毫秒。 setMaxFileSize : 设置录制的媒体大小。单位字节。 setOutputFile : 设置输出文件的路径。 MediaPlayer的播音相关方法: reset : 重置播放器 prepare : 准备播放 start : 开始播放 pause : 暂停播放 stop : 停止播放 setOnPreparedListener : 设置准备播放监听器。 setOnCompletionListener : 设置结束播放监听器。 setOnSeekCompleteListener : 设置播放拖动监听器。 create : 创建指定Uri的播放器。 setDataSource : 设置播放数据来源。create与setDataSource只需设置其一。 setVolume : 设置音量。第一个参数是左声道,第二个参数是右声道,取值在0-1之间。 setAudioStreamType : 设置音频流的类型。AudioManager.STREAM_MUSIC表示音乐,AudioManager.STREAM_RING表示铃声,AudioManager.STREAM_ALARM表示闹钟,AudioManager.STREAM_NOTIFICATION表示通知。 setLooping : 设置是否循环播放。 i

    03

    Android开发笔记(一百二十五)自定义视频播放器

    在Android中播放视频的方式有两种: 1、使用MediaPlayer结合SurfaceView进行播放。其中通过SurfaceView显示视频的画面,通过MediaPlayer来设置播放参数、并控制视频的播放操作;该方式的具体说明参见《Android开发笔记(五十七)录像录音与播放》。 该方式的好处是灵活性强,可随意定制。缺点是编码复杂,连开始/暂停的按钮都要自己实现。 2、使用VideoView结合MediaController进行播放。VideoView其实是从SurfaceView扩展而来,并在内部集成了MediaPlayer,从而实现视频画面与视频操作的统一管理;而MediaController则是一个简单的播放控制条,它实现了基本的控制按钮,如开始/暂停按钮、上一个/下一个按钮、快进/快退按钮,以及进度条等控件;把VideoView与MediaController关联起来,便是一个类似于Window Media Player的精简版播放器。 该方式的好处是简单易用,编码容易。缺点是可定制差,难以扩展,想给按钮换个样式都不行。 但是不积跬步无以至千里,如果我们要定制一个好用好看的播放器,还是得先把笨拙的VideoView与MediaController搞清楚才行。就像穷国一开始没有汽车工业,那只能从研究拖拉机开始,没办法一蹴而就强行大跃进呀。

    04
    领券