我们平时利用Android手机娱乐最常见的方式莫过于听歌和看电影了,当然还有玩游戏,当然,这里我要说的是针对Android对于媒体文件播放的支持。Android里面提供了MediaPlayer类来播放媒体文件,下面来看一下怎样用MediaPlayer对象来播放媒体文件: 一般来说,用MediaPlayer类来播放媒体文件有以下几个步骤:
1、新建一个MediaPlayer对象。 2、调用setDataSource方法设置MediaPlayer对象播放的媒体文件的路径 3、调用prepare() 方法准备媒体文件播放 4、调用start() 方法播放媒体文件
这里给出MediaPlayer类常用的方法:
setDatasource(String path) 用于设置要播放的媒体文件的位置path 是媒体文件的绝对路径。这个方法有多个重载版本,适应于不同的情况,既可以对使用文件路径作为参数,也可以使用描述文件位置的Uri作为参数
prepare() 在开始播放之前调用这个方法完成媒体文件的准备工作
start() 开始播放媒体文件文件
pause() 暂停播放
reset() 将MediaPlayer对象重置为刚刚被创建的状态
seekTo(int msec) 从指定的位置开始播放视频,参数单位:秒
stop() 停止播放音频,调用之后MediaPlayer对象必须重新准备,不然无法继续播放媒体文件
release() 释放MediaPlayer对象占用的资源
isPlaying() 判断MediaPlayer对象是否正在播放媒体文件
getDuration() 获得载入的媒体文件的时长
接下来仍然以一个小例子来看一下使用MediaPlayer对象播放媒体文件,新建一个Android工程: activity_main.xm:
<?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:gravity="center_horizontal"
android:orientation="vertical" >
<EditText
android:id="@+id/editTextPathInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="/sdcard/With Me.mp3" />
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal" >
<Button
android:id="@+id/buttonPlayMusic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="开始"/>
<Button
android:id="@+id/buttonPauseMusic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="暂停"/>
<Button
android:id="@+id/buttonStopMusic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="停止"/>
</TableRow>
<SurfaceView
android:id="@+id/sufaceViewVideoPlay"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>整体是一个竖向布局,最上面是一个EditText用于输入媒体文件的路径,接下来是三个按钮控制播放状态,最后是一个SurfaceView组件用于作为视频文件的输出控件,后面会介绍。接下来是MainAcitvity.java:
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.media.MediaPlayer;
import android.opengl.Visibility;
import android.os.Bundle;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.SurfaceHolder.Callback;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText editText = null;
private Button button = null;
private MediaPlayer mediaPlayer = null;
private String path = null;
/*
* 设定MediaPlayer对象的三种播放状态、正在播放 、暂停播放、
* 停止播放 的对应常量
*/
private static final int MEDIAPLAYER_IS_PLAYING = 1;
private static final int MEDIAPLAYER_IS_PAUSE = 2;
private static final int MEDIAPLAYER_IS_STOP = 3;
private static int MEDIAPLAYER_STATE =
MEDIAPLAYER_IS_STOP; // 开始的时候MediaPlayer对象处于停止状态
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.play_activity);
mediaPlayer = new MediaPlayer();
editText = (EditText) findViewById(R.id.editTextPathInput);
button = (Button) findViewById(R.id.buttonPlayMusic);
button.setOnClickListener(listener);
button = (Button) findViewById(R.id.buttonPauseMusic);
button.setOnClickListener(listener);
button = (Button) findViewById(R.id.buttonStopMusic);
button.setOnClickListener(listener);
initMediaPlayer(); // 初始化MediaPayer对象
}
private View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId())
{
case R.id.buttonPlayMusic:
if(MEDIAPLAYER_STATE == MEDIAPLAYER_IS_STOP)
{
/*
* 如果MediaPlayer对象处于停止状态那么初始化MediaPlayer对象
*/
initMediaPlayer();
}
playMedia();
break;
case R.id.buttonPauseMusic:
pauseMedia();
break;
case R.id.buttonStopMusic:
stopMedia();
break;
}
}
};
private void initMediaPlayer() // 初始化MediaPlayer对象
{
path = editText.getText().toString();
if(path != null)
{
if(!(new File(path)).exists()) // 判断媒体文件是否存在
{
Toast.makeText(this, "指定媒体文件不存在!", Toast.LENGTH_SHORT).show();
return ;
}
try {
mediaPlayer.setDataSource(path); // 设置播放的文件位置
mediaPlayer.prepare(); // 准备文件
/*
* 这里是对文件后缀名进行判断,如果是 .mp4 文
* 件,那么就播放视频,因为MediaPlayer类的
* setDisplay方法接收的是一个SurfaceHolder
* 对象所以先要得到我们布局文件中的
* SurfaceView的SurfaceHolder对象,之后
* 设置长和宽,最后设置视频输出源
*/
if(path.substring(path.length() - 4, path.length()).equals(".mp4"))
{
SurfaceHolder surfaceHolder = (((SurfaceView )
findViewById(R.id.sufaceViewVideoPlay)).getHolder());
surfaceHolder.setFixedSize(mediaPlayer.getVideoWidth(),
mediaPlayer.getVideoHeight());
mediaPlayer.setDisplay(surfaceHolder);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void playMedia() // 开始播放
{
mediaPlayer.start();
MEDIAPLAYER_STATE = MEDIAPLAYER_IS_PLAYING;
updateButtonState(MEDIAPLAYER_STATE);
}
private void pauseMedia() // 暂停播放
{
if(mediaPlayer.isPlaying())
{
mediaPlayer.pause();
MEDIAPLAYER_STATE = MEDIAPLAYER_IS_PAUSE; // 更新播放状态
updateButtonState(MEDIAPLAYER_STATE); // 更新按钮状态
}
}
private void stopMedia() // 停止播放
{
mediaPlayer.reset();
MEDIAPLAYER_STATE = MEDIAPLAYER_IS_STOP; // 更新播放状态
updateButtonState(MEDIAPLAYER_IS_STOP); // 更新按钮状态
}
/*
* 根据 mediaPlayer 的状态来更新按钮的状态,分别是播放、暂
* 停、停止
*/
private void updateButtonState(int mediaPlayerState)
{
Button button1 = null, button2 = null, button3 = null;
button1 = (Button) findViewById(R.id.buttonPlayMusic);
button2 = (Button) findViewById(R.id.buttonPauseMusic);
button3 = (Button) findViewById(R.id.buttonStopMusic);
if(mediaPlayerState == MEDIAPLAYER_IS_PLAYING) // 正在播放状态
{
button1.setEnabled(false);
button2.setEnabled(true);
button3.setEnabled(true);
}
else if(mediaPlayerState == MEDIAPLAYER_IS_PAUSE) // 暂停状态
{
button1.setEnabled(true);
button2.setEnabled(false);
button3.setEnabled(true);
}
else if(mediaPlayerState == MEDIAPLAYER_IS_STOP) // 停止状态
{
button1.setEnabled(true);
button2.setEnabled(false);
button3.setEnabled(false);
}
}
@Override
public void onPause()
{
super.onPause();
pauseMedia();
}
@Override
public void onResume()
{
super.onResume();
if(MEDIAPLAYER_STATE == MEDIAPLAYER_IS_PAUSE)
{
mediaPlayer.start();
MEDIAPLAYER_STATE = MEDIAPLAYER_IS_PLAYING; // 更新播放状态
updateButtonState(MEDIAPLAYER_STATE); // 更新按钮状态
}
}
@Override
public void onDestroy()
{
super.onDestroy();
stopMedia();
mediaPlayer.release();
}
}在MainActivity.java中主要是先进行MediaPlayer的初始化(设定媒体文件路径、准备媒体文件、判断是音频还是视频),之后就是控制播放状态和进行相关按钮状态UI的更新,逻辑并不复杂。最后我们来看一下运行结果:

因为模拟器中没有媒体文件,所以用的真机进行的测试,单击“开始”按钮:

单击“暂停”按钮:

单击“停止”按钮之后又变成了第一幅图。接下来在媒体文件路径输入控件EditText中输入一个视频的绝对路径:

成功的播放出来了视频!
最后,其实播放视频也可以使用VideoView控件,这个控件将MediaPlayer类封装在内部,是一个视频专用播放控件,有兴趣的小伙伴可以自己尝试一下。
如果博客中有什么不正确的地方,还请多多指点。 谢谢观看。。。