我们平时利用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类封装在内部,是一个视频专用播放控件,有兴趣的小伙伴可以自己尝试一下。

如果博客中有什么不正确的地方,还请多多指点。
谢谢观看。。。

更多相关文章

  1. Android(安卓)实现简单音乐播放器(二)
  2. Android实现系统状态栏的隐藏和显示功能
  3. 慎用原生MediaPlayer类播放音频
  4. Broadcast监听网络状态,ping判断网络是否可用
  5. 纪念为“第九维”而死的脑细胞
  6. Android之Wifi学习(2)------连接Wifi
  7. Android(安卓)RecyclerView 监听滑动
  8. Android多用户之UserManagerService源码分析
  9. Android实现简单的音乐播放

随机推荐

  1. 第四课 Gallery的使用
  2. 科大讯飞Android语音识别onResult()方法
  3. Android中pm命令用法
  4. android 入门学习笔记attr.xml TypedArra
  5. Android(安卓)Proguard介绍
  6. android app 程序设计思路小结
  7. Android(安卓)进阶——AIDL 详解之AIDL
  8. android之ProgressBar及其子类SeekBar和R
  9. Android APIDemos
  10. Android Studio Gradle project sync fai