8.4 播放多媒体文件
8.4.1 播放音频
在Android中播放音频文件一般都是使用MediaPlayer类来实现的,它对多种格式的音频文件提供了非常全面的控制方法。
方法名 | 功能描述 |
setDataSource() | 设置要播放的音频文件的位置 |
prepare() | 在开始播放之前调用这个方法来完成准备工作 |
start() | 开始或继续播放音频 |
pause() | 暂停播放音频 |
reset() | 将MediaPlayer对象重置到刚刚创建的状态,若在播放状态也会停止播放 |
seekTo() | 从指定的位置开始播放音频 |
stop() | 停止播放音频,调用这个方法后MediaPlayer对象无法再播放音频 |
release() | 释放掉与MediaPlayer对象的相关资源 |
isPlaying() | 判断当前MediaPlayer是否正在播放音频 |
getDuration() | 获取载入的音频文件的时长 |
MediaPlayer的工作流程:1)首先需要创建一个MediaPlayer对象
2)调用MediaPlayer对象的setDataSource()方法来设置音频文件路径
3)再调用prepare()使MediaPlayer进入到准备状态
4)最后调用start()方法就可以开始播放音乐了
5)调用pause()方法就会暂停播放
6)调用reset()方法就会停止播放
//新建一个PlayAudioTest项目
//修改activity_main中的代码
//上面布局文件中放置了三个按钮,分别是对音频文件进行播放,暂停和停止操作。
//修改MainActivity中的代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private MediaPlayer mediaPlayer = new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button play = (Button) findViewById(R.id.play);
Button pause = (Button) finfViewById(R.id.pause);
Button stop = (Button) findViewById(R.id.stop);
play.setOnClickListener(this);
pause.setOnClickListener(this);
stop.setOnClickListener(this);
//由于音频要放在SD卡中,因此动态申请运行时权限处理
if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != Packagemanager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL},1);
} else {
initMediaPlayer(); //初始化MediaPlayer
}
}
private void initMediaPlayer() {
try {
File file = new File(Environment.getExternalStorageDirectory(),"music.mp3");
mediaPlayer.setDataSource(file.getPath()); //指定音频文件的路径
mediaPlayer.prepare(); //让MediaPlayer进入到准备状态
} catch (Exception e) {
e.printStackTrace()
}
}
@Override
public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
initMediaPlayer();
} else {
Toast.makeText(this,"拒绝权限将无法使用程序",Toast.LENGTH_SHORT).show();
finish();
}
break;
dafault:
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.play:
if (!mediaPlayer.isPlaying()) {
mediaPlayer.start(); //开始播放
}
break;
case R.id.pause:
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause(); //暂停播放
}
break;
case R.id.stop:
if (mediaPlayer.isPlaying()) {
mediaPlayer.reset(); //暂停播放
}
break;
dafault:
break;
}
}
@Override
protected void OnDestroy() {
super.onDestory();
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
}
}
}
//还有一个重要的点是千万不要忘记要在AndroidManifest文件中声明用到的权限
...
8.4.2 播放视频
播放视频文件其实并不比音频文件复杂,主要是使用VideoView类来实现的,这个类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器。他也有很多方法:
方法名 | 功能描述 |
setVideoPath() | 设置要播放的视频文件的位置 |
start() | 开始或继续播放视频 |
pause() | 暂停播放视频 |
resume() | 将视频重头开始播放 |
seekTo() | 从指定的位置开始播放视频 |
isPlaying() | 判断当前是否正在播放视频 |
getDuration() | 获取载入的视频文件的时长 |
suspend() | 用于将VideoView所占用的资源释放掉的 |
//新建一个PlayVideoTest项目
//修改activity_main中的代码
//上面布局文件中放置了三个按钮,分别是控制视频文件进行播放,暂停和停止操作。按钮下面还有一个VideoView用来放视频的
//修改MainActivity中的代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private MediaPlayer mediaPlayer = new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button play = (Button) findViewById(R.id.play);
Button pause = (Button) finfViewById(R.id.pause);
Button replay = (Button) findViewById(R.id.replay);
play.setOnClickListener(this);
pause.setOnClickListener(this);
replay.setOnClickListener(this);
//由于音频要放在SD卡中,因此动态申请运行时权限处理
if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != Packagemanager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL},1);
} else {
initVideoPath(); //初始化VideoView
}
}
private void initVideoPath() {
File file = new File(Environment.getExternalStorageDirectory(),"movie.mp4");
videoView.setVideoPath(file.getPath()); //指定视频文件的路径
}
@Override
public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
initVideoPath();
} else {
Toast.makeText(this,"拒绝权限将无法使用程序",Toast.LENGTH_SHORT).show();
finish();
}
break;
dafault:
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.play:
if (!VideoView.isPlaying()) {
VideoView.start(); //开始播放
}
break;
case R.id.pause:
if (VideoView.isPlaying()) {
VideoView.pause(); //暂停播放
}
break;
case R.id.stop:
if (VideoView.isPlaying()) {
VideoView.reset(); //暂停播放
}
break;
dafault:
break;
}
}
@Override
protected void OnDestroy() {
super.onDestory();
if (VideoView != null) {
VideoView.suspend(); //suspend()方法是用于将VideoView所占用的资源释放掉的
}
}
}
//还有一个重要的点是千万不要忘记要在AndroidManifest文件中声明用到的权限
...