Android包含了一个MediaPlayer类,这个类可以用来播放和控制音频和视频。现在我们使用音频功能。MediaPlayer类可用于控制播放的音频/视频文件和流
最简单的MediaPlayer示例是能否与应用程序一起打包的音频文件,也就是音频文件放在原始资源里面。所以,我们在项目的res文件夹下新建一个文件,叫raw,并加入音频文件。
1.启动媒体播放器
位音频文件创建MeidaPlayer非常简单,可以使用静态方法create实例化一个MediaPlayer对象,传入作为上下文的this(活动将源自它)以及音频文件生成的ziyuanID。
MediaPlayer mediaPlayer=MediaPlayer.create(this.R.raw.androidMp3);
当然,也可以用构造方法实例化一个MediaPlayer对象:MediaPlayer mediaPlayer=new MediaPlayer();
之后就可以用mediaPlayer.start();来播放文件了。
2.控制播放
MediaPlayer类有多个嵌套的类,他们是监听MedaiPlayer所发送事件的借口。这些事件与状态变化有关。例如,MediaPlayer将对实现OnCompletionListener并通过setOnCompletionListener注册的类调用onCompletion方法,该操作将在音频文件正在播放时执行。下面是一个完整的示例,该活动将无限次的重复,通过使用OnCompletionLitener播放相同的音频文件。在onStart方法中初始化MediaPlayer对象并开始播放;在onStop方法中停止播放和释放资源。
package com.example.musicdemo;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
public class MainActivity extends Activity implements OnCompletionListener{
MediaPlayer mediaPlay;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
super.onStart();
mediaPlay=MediaPlayer.create(this,R.raw.android);
mediaPlay.setOnCompletionListener(this);
mediaPlay.start();
}
@Override
protected void onStop() {
super.onStop();
mediaPlay.stop();
mediaPlay.release();
}
public void onCompletion(MediaPlayer mp) {
mediaPlay.start();
}
}
当然,这可以在没有OnCompletionListener的情况下完成,只需简单地通过使用setLooping(true)方法将MediaPlayer设置为循环播放。
MediaPlayer状态图
回放控制音频/视频文件和流的管理是作为一个状态机。下面的图显示了生命周期和一个MediaPlayer对象由支持回放控制操作。椭圆表示状态可能驻留在一个MediaPlayer对象。弧线代表回放控制操作,驱动对象状态转换。有两种类型的弧线。用一个弧线箭头代表同步方法调用头,而那些有双箭头代表异步方法调用负责人。