Android多媒体开发系列文章
一、什么是多媒体
多媒体(duō méi tǐ) 的英文单词是Multimedia,它由media和multi两部分组成。一般理解为多种媒体的综合
多媒体是计算机和视频技术的结合,实际上它是两个媒体;声音和图像,或者用现在的术语:音响和电视。
多媒体(Multimedia),在计算机系统中,组合两种或两种以上媒体的一种人机交互式信息交流和传播媒体
使用的媒体包括文字、图片、照片、声音 (包含音乐、语音旁白、特殊音效)、动画和影片,以及程式所提供的互动功能
多媒体是超媒体(Hypermedia)系统中的一个子集,而超媒体系统是使用超链接 (Hyperlink)构成的全球信息系统
全球信息系统是因特网上使用 TCP/IP 协议和 UDP/IP 协议
二、音乐播放器
Android 官方提供了MediaPlayer 核心类,用于播放音乐,其状态流程如下图所示。MediaPlayer 必须严格按照状态图操作,否则就会出现错误,这些错误都是底层抛出,严格按照状态图操作的话一般就不会出问题。
MediaPlayer,原生的API,可以播放音视频,但是支持的格式比较少,实际开发中用的比较少,但是还是很有必要学习,熟悉API,因为Vitamio框架的API大部分跟原生的API是一样的
1、MediaPlayer使用流程图
2、MediaPlayer核心方法
方法 | 说明 |
---|---|
create() | 播放本地res/raw/目录下的资源 |
reset() | 重置为初始状态 |
setAudioStreamType() | 设置音乐格式,例如:AudioManager.STREAM_MUSIC |
setDataSource() | 设置音频源,本地网络资源均可 |
prepare() | 播放前的准备工作 |
prepareAsync() | 异步进行准备工作,播放网络音频的时候使用 |
start() | 开始或恢复播放 |
pause() | 暂停播放 |
stop() | 停止播放 |
release() | 释放资源 |
getDuration() | 获取音乐最大长度(毫秒单位) |
getCurrentPosition() | 获取当前的播放进度 |
seekTo() | 拖拽进度 |
setDisplay() | 设置输出画面 |
setOnPreparedListener() | 设置准备监听 |
为了演示MediaPlayer 的使用,我们需要提前准备一个mp3 文件放到sdcard 中
需求:制作一个播放器,能够播放/暂停/停止音乐文件,并且添加一个SeekBar(可以拖拽的ProgressBar),当音乐播放时SeekBar 也会不断的跟新当前的进度,当用户拖动SeekBar 时可以更改播放的进度
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="play"
android:text="播放"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="pause"
android:text="暂停"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="stop"
android:text="停止"/>
</LinearLayout>
<SeekBar
android:id="@+id/sb"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
代码实现
public class MainActivity extends Activity implements OnSeekBarChangeListener {
private SeekBar sb;
private MediaPlayer player;
private int duration;
// 播放器的几个状态
private static final int PLAYING = 1;// 播放状态
private static final int PAUSING = 2;// 暂停状态
private static final int STOPPING = 3;// 停止状态
private volatile int CURRENT = 0;// 当前状态
private Timer timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sb = (SeekBar) findViewById(R.id.sb);
//设置拖动监听
sb.setOnSeekBarChangeListener(this);
}
//播放
public