这是我参与「第四届青训营 」笔记创作活动的的第5天 哈喽啊家人们,今天我又来写笔记咯,上一篇我们介绍了Android的网络请求和数据存储。那么今天我们就来学习多媒体播放与录制。那我们就开始吧!
音频播放
Android提供了常见多媒体格式的API,它们位于android.media包中。
媒体播放器MediaPlayer
MediaPlayer是Android系统多媒体包中的类,主要用来控制音频文件、视频文件的播放。
生命周期: 创建、初始化、同步处理、释放、结束。
如图:
播放音频文件
- 存储在应用程序的res资源中的音乐文件,使用create()方法创建MediaPlayer对象
- 由于create()方法已经封装了初始化及同步的方法,所以不用进行setDataSource()初始化以及prepare()操作
- 例如:
MediaPlayer mplayer = MediaPlayer.create(this,R.raw.music);
播放
- 调用start()方法。
mplayer.start(); - 暂停,调用pause()方法。
- 停止,调用stop()方法。
- 释放资源
- 播放结束时,调用release()释放系统资源
- 重新播放音频,调用reset()返回空闲状态
视频播放
Android提供了两种视频播放方法
- MediaPlayer+SurfaceView:基础,可编程控制播放器大小和位置
- MediaController+VideoView:使用方便,播放器大小、位置不接受控制
MediaPlayer+SurfaceView
MediaPlayer+SurfaceView相互配合完成视频播放
SurfaceView surfaceView = (SurfaceView)findViewByld(R.id.surfaceView);
SurfaceHolder sh = surfaceView.getHolder();
根据文件位置,分两种实现方式:
- 访问项目资源res
mediaPlayer = MediaPlayer.create(this,R.raw.sample); //设置数据源mediaPlayer.setDisplay(sh);mediaPlayer.start();
- 访问Sdcard、网络视频
path = Environment getExternalStoragePublicDirectory(Environment.DIRECTORY DOWNLOADS)+ "/sample.3gp";mMediaPlayer = new MediaPlayer();mMediaPlayer.setDataSource(path);//设置数据源mMediaPlayersetDisplay(sh);mMediaPlayer.prepare();mMediaPlayer.start();
MediaController+VideoView
- MediaController的方法setMediaPlayer()并非指定VideoView,而是指定一个接口MediaPlayerControl,接口内部定义了- -些播放相关的播放、暂停、停止等操作。
- VideoView是系统自带的视频播放控件,自带进度条、暂停、播放等功能,使用起来十分简单,VideoView实现了MediaPlayerControl。
录音和拍照
录音
MediaRecorder类
Android提供了两种实现录音的API
- AudioRecord
- 比较灵活,功能更多。
- MediaRecorder
- 操作简单 。
- 可以实现录音和录像,需要严格遵守API说明中的函数调用先后顺序。
创建录音对象 MediaRecorder mr = new MediaRecorder(); 设置录音文件
File soundFile = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".amr");
//amr为录音文件格式
if(!soundFile.exists()){
try{
soundFile.createNewFile();
}catch(IOException e){}
}
mr.setOutputFile(soundFile.getAbsolutePath());
在AndroidManifest.xml中增加音频捕获权限
<user-permission android:name="android.permission.RECORD_AUDIO"/>
<user-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
拍照
两种方式:Camera和Intent
intent:编程简单,易实现
Camera:复杂,功能强大