21天学习android开发教程之MediaPlayer

本文介绍MediaPlayer的使用。MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用MediaPlayer,要视情况选择了。MediaPlayer播放音频比较简单,但是要播放视频就需要SurfaceView。SurfaceView比普通的自定义View更有绘图上的优势,它支持完全的OpenGL ES库。
先贴出本文程序运行结果的截图,上面是播放/停止音频,可用SeekBar来调进度,下面是播放/停止视频,也是用SeekBar来调进度:

main.xml的源码:

<linearlayout android:id="@+id/LinearLayout01"
  android:layout_width="fill_parent" android:layout_height="fill_parent"
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical">
  <seekbar android:id="@+id/SeekBar01" android:layout_height="wrap_content"
    android:layout_width="fill_parent">
  <linearlayout android:id="@+id/LinearLayout02"
    android:layout_width="wrap_content" android:layout_height="wrap_content">
    <button android:id="@+id/Button01" android:layout_width="wrap_content"
      android:layout_height="wrap_content" android:text="播放音频">
    <button android:id="@+id/Button02" android:layout_width="wrap_content"
      android:layout_height="wrap_content" android:text="停止播放">

  <seekbar android:id="@+id/SeekBar02" android:layout_height="wrap_content"
    android:layout_width="fill_parent">

  <surfaceview android:id="@+id/SurfaceView01"
    android:layout_width="fill_parent" android:layout_height="250px">
  <linearlayout android:id="@+id/LinearLayout02"
    android:layout_width="wrap_content" android:layout_height="wrap_content">
    <button android:layout_width="wrap_content"
      android:layout_height="wrap_content" android:id="@+id/Button03"
      android:text="播放视频">
    <button android:layout_width="wrap_content"
      android:layout_height="wrap_content" android:text="停止播放" android:id="@+id/Button04">

本文程序的源码,有点长:

package com.testMedia;

import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.Toast; 

public class testMedia extends Activity {
   /** Called when the activity is first created. */ 

  private SeekBar skb_audio=null;
 private Button btn_start_audio = null;
 private Button btn_stop_audio = null;

 private SeekBar skb_video=null;
 private Button btn_start_video = null;
 private Button btn_stop_video = null;
 private SurfaceView surfaceView;
 private SurfaceHolder surfaceHolder; 

 private MediaPlayer m = null;
 private Timer mTimer;
 private TimerTask mTimerTask;

 private boolean isChanging=false;//互斥变量,防止定时器与SeekBar拖动时进度冲突
  @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main); 

  //----------Media控件设置---------//
  m=new MediaPlayer();

  //播放结束之后弹出提示
  m.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
      @Override
      public void onCompletion(MediaPlayer arg0) {
        Toast.makeText(testMedia.this, "结束", 1000).show();
        m.release();
      }
  });

  //----------定时器记录播放进度---------//
  mTimer = new Timer();
  mTimerTask = new TimerTask() {
   @Override
   public void run() {
     if(isChanging==true)
       return;

     if(m.getVideoHeight()==0)
       skb_audio.setProgress(m.getCurrentPosition());
     else
       skb_video.setProgress(m.getCurrentPosition());
   }
  };

  mTimer.schedule(mTimerTask, 0, 10);

  btn_start_audio = (Button) this.findViewById(R.id.Button01);
  btn_stop_audio = (Button) this.findViewById(R.id.Button02);
  btn_start_audio.setOnClickListener(new ClickEvent());
  btn_stop_audio.setOnClickListener(new ClickEvent());
  skb_audio=(SeekBar)this.findViewById(R.id.SeekBar01);
  skb_audio.setOnSeekBarChangeListener(new SeekBarChangeEvent());

  btn_start_video = (Button) this.findViewById(R.id.Button03);
  btn_stop_video = (Button) this.findViewById(R.id.Button04);
  btn_start_video.setOnClickListener(new ClickEvent());
  btn_stop_video.setOnClickListener(new ClickEvent());
  skb_video=(SeekBar)this.findViewById(R.id.SeekBar02);
  skb_video.setOnSeekBarChangeListener(new SeekBarChangeEvent());
  surfaceView = (SurfaceView) findViewById(R.id.SurfaceView01);
  surfaceHolder = surfaceView.getHolder();
  surfaceHolder.setFixedSize(100, 100);
  surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
 } 

 /*
 * 按键事件处理
 */
 class ClickEvent implements View.OnClickListener{
  @Override
  public void onClick(View v) {
    if(v==btn_start_audio)
    {
      m.reset();//恢复到未初始化的状态
      m=MediaPlayer.create(testMedia.this, R.raw.big);//读取音频
      skb_audio.setMax(m.getDuration());//设置SeekBar的长度
      try {
        m.prepare();  //准备
      } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      m.start();  //播放
    }
    else if(v==btn_stop_audio || v==btn_stop_video)
    {
      m.stop();
    }
    else if(v==btn_start_video)
    {
      m.reset();//恢复到未初始化的状态
      m=MediaPlayer.create(testMedia.this, R.raw.test);//读取视频
      skb_video.setMax(m.getDuration());//设置SeekBar的长度
      m.setAudioStreamType(AudioManager.STREAM_MUSIC);
      m.setDisplay(surfaceHolder);//设置屏幕

      try {
       m.prepare();

      } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      m.start();
    }
  }
 }

 /*
 * SeekBar进度改变事件
 */
 class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener{

  @Override
  public void onProgressChanged(SeekBar seekBar, int progress,
      boolean fromUser) {
    // TODO Auto-generated method stub

  }

  @Override
  public void onStartTrackingTouch(SeekBar seekBar) {
   isChanging=true;
  }

  @Override
  public void onStopTrackingTouch(SeekBar seekBar) {
    m.seekTo(seekBar.getProgress());
   isChanging=false;
  }

 }

}

以上就是21天学习android开发教程第一篇关于MediaPlayer的相关介绍,希望对大家的学习有所帮助。

(0)

相关推荐

  • 深入Android MediaPlayer的使用方法详解

    1)如何获得MediaPlayer实例:可以使用直接new的方式:MediaPlayer mp = new MediaPlayer();也可以使用create的方式,如:MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了 2) 如何设置要播放的文件:MediaPlayer要播放的文件主要包括3个来源:a. 用户在应用中事先自带的resource资源例如:MediaPlayer.create(t

  • 浅析Android 的 MediaPlayer类

    在Android中通常用MediaPlayer来播放一些媒体文件,对于音频文件来说只需直接使用MeidaPlayer结合几句代码即可,但是对于视频文件来说稍微复杂一些.单独的MediaPlayer只能播放音频文件,要想播放视频还需要SurfaceView来配合显示画面.而对于SurfacView而言,在Android中采用了显示与控制分离机制,即SurfaceView只是负责显示画面,而不负责控制视频流,因此还需要SurfaceHolder来控制视频流.关键代码如下: 复制代码 代码如下: Me

  • Android提高之MediaPlayer播放网络视频的实现方法

    前面讲解了MediaPlayer播放网络音频,主要介绍了MediaPlayer关于网络音频的缓冲和进度条控制的方法,本文再来讲解一下MediaPlayer播放网络视频的方法.播放网络视频比播放网络音频需要多一个SurfaceView而已,在已经熟悉了MediaPlayer播放网络音频之后,相信大家对本文所述的播放网络视频也能很快地掌握. 先来看看本文程序运行截图,如下所示: 本文程序的视频来自http://daily3gp.com,大家可以替换程序中的视频链接,试试其他影片. main.xml的

  • Android 使用mediaplayer播放res/raw文件夹中的音乐的实例

    Android 使用mediaplayer播放res/raw文件夹中的音乐的实例 (1)在res文件夹中新建一个文件夹重命名为raw,并且将要播放的音乐放到raw文件夹里面 (2)修改layout目录下的xml布局文件,添加3个按钮空间和一个文本控件,用于提示当前播放状态和 播放暂停 停止等功能.具体代码如下 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layou

  • Android提高之MediaPlayer播放网络音频的实现方法

    前面有文章曾经地介绍过MediaPlayer的基本用法,这里就更加深入地讲解MediaPlayer的在线播放功能.本文主要实现MediaPlayer在线播放音频的功能,由于在线视频播放比在线音频播放复杂,因此先介绍在线音频播放的实现,这样可以帮助大家逐步深入了解MediaPlayer的在线播放功能. 先来看看本文程序运行的结果如下图所示: main.xml的源码如下: <?xml version="1.0" encoding="utf-8"?> <

  • Android提高之MediaPlayer音视频播放

    前面文章已经详细介绍了Android界面的入门技术,相信大家在看完和跟着练习之后,会对于常用的Layout和View都会有一定的了解了,接下来就不再强调介绍界面了,而是针对具体的常见功能而展开. 本文将介绍MediaPlayer的使用.MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用MediaPlayer,这需要视情况选择.MediaPlayer播放音频比较简单,但是要播放视频就需要Sur

  • Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能有: 播放.暂停功能: 进度条显示播放进度功能 拖动进度条改变进度功能: 后台播放功能: 停止功能: 退出功能: 代码实现 导入歌曲到手机SD卡的Music目录中,这里我导入了4首歌曲:仙剑六里面的<誓言成晖>.<剑客不能说>.<镜中人>和<

  • Android MediaPlayer实现音乐播放器实例代码

    Android MediaPlayer实现音乐播放器 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height=&qu

  • android多媒体音乐(MediaPlayer)播放器制作代码

    本文实例为大家分享了android多媒体音乐播放器的具体实现代码,供大家参考,具体内容如下 首先,在AndroidManifest.xml中配置权限 <!-- 读取手机中的音乐 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 注释:Android多媒体音乐的几种来源 1.在andriod的应用中 MediaPlayer.create(this, R.r

  • Android开发之MediaPlayer基本使用方法详解

    本文实例讲述了Android MediaPlayer基本使用方法.分享给大家供大家参考,具体如下: 使用MediaPlayer播放音频或者视频的最简单例子: Java代码部分: public class MediaPlayerStudy extends Activity { private Button bplay,bpause,bstop; private MediaPlayer mp = new MediaPlayer(); @Override public void onCreate(Bu

随机推荐