Android---基础篇5|青训营笔记

152 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第5天 哈喽啊家人们,今天我又来写笔记咯,上一篇我们介绍了Android的网络请求和数据存储。那么今天我们就来学习多媒体播放与录制。那我们就开始吧!

音频播放

Android提供了常见多媒体格式的API,它们位于android.media包中。

媒体播放器MediaPlayer

MediaPlayer是Android系统多媒体包中的类,主要用来控制音频文件、视频文件的播放。
生命周期: 创建、初始化、同步处理、释放、结束。
如图:

image.png

播放音频文件

  • 存储在应用程序的res资源中的音乐文件,使用create()方法创建MediaPlayer对象
  • 由于create()方法已经封装了初始化及同步的方法,所以不用进行setDataSource()初始化以及prepare()操作
  • 例如:MediaPlayer mplayer = MediaPlayer.create(this,R.raw.music);

播放

  1. 调用start()方法。mplayer.start();
  2. 暂停,调用pause()方法。
  3. 停止,调用stop()方法。
  4. 释放资源
    1. 播放结束时,调用release()释放系统资源
    2. 重新播放音频,调用reset()返回空闲状态

视频播放

Android提供了两种视频播放方法

  1. MediaPlayer+SurfaceView:基础,可编程控制播放器大小和位置
  2. 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

  1. AudioRecord
    1. 比较灵活,功能更多。
  2. MediaRecorder
    1. 操作简单 。
    2. 可以实现录音和录像,需要严格遵守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:复杂,功能强大