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

作者:Jacob-wj 时间:2022-09-05 12:21:38 

本文实例讲述了Android MediaPlayer基本使用方法。分享给大家供大家参考,具体如下:

使用MediaPlayer播放音频或者视频的最简单例子:

Java代码部分:


public class MediaPlayerStudy extends Activity {
 private Button bplay,bpause,bstop;
 private MediaPlayer mp = new MediaPlayer();
 @Override
 public void onCreate(BundlesavedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   bplay =(Button)findViewById(R.id.play);
   bpause =(Button)findViewById(R.id.pause);
   bstop =(Button)findViewById(R.id.stop);
   bplay.setOnClickListener(new OnClickListener(){
     @Override
     public void onClick(View v) {
        try {
          mp.setDataSource("/sdcard/test.mp3");
          mp.prepare();
          mp.start();
        } catch (IllegalArgumentException e){
          e.printStackTrace();
        } catch (IllegalStateException e){
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
        mp.setOnCompletionListener(new OnCompletionListener(){
          @Override
          public void onCompletion(MediaPlayer mp){
            mp.release();
          }
        });
     }
   });
   bpause.setOnClickListener(new OnClickListener(){
     @Override
     public void onClick(View v) {
        if(mp != null){
          mp.pause();
        }
     }
   });
   bstop.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View v) {
      if(mp != null){
       mp.stop();
      }
   }
   });
 }
 @Override
 protected void onDestroy() {
   if(mp != null)
     mp.release();
   super.onDestroy();
 }
}

布局文件main.xml:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical" android:layout_width="fill_parent"
   android:layout_height="fill_parent">
   <TextView android:layout_width="fill_parent"
   android:layout_height="wrap_content" android:text="@string/hello" />
   <Button android:text="play" android:id="@+id/play"
     android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
   <Button android:text="pause" android:id="@+id/pause"
     android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
   <Button android:text="stop" android:id="@+id/stop"
     android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
 </LinearLayout>

程序说明:

这个例子只是描述了MediaPlayer的基本使用步骤和方式,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(this,R.raw.test);

b. 存储在SD卡或其他文件路径下的媒体文件

例如:


mp.setDataSource("/sdcard/test.mp3");

c. 网络上的媒体文件

例如:


mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");

MediaPlayer的setDataSource一共四个方法:

setDataSource(String path)
setDataSource(FileDescriptor fd)
setDataSource(Context context, Uri uri)
setDataSource(FileDescriptor fd, long offset, long length)

3)对播放器的主要控制方法:

Android通过控制播放器的状态的方式来 * 体文件的播放,其中:

prepare()prepareAsync()  提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。
start()是真正启动文件播放的方法,
pause()stop()比较简单,起到暂停和停止播放的作用,
seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置 * 来处理的。
release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。
reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。

4)设置播放器的 * :

MediaPlayer提供了一些设置不同 * 的方法来更好地对播放器的工作状态进行监听,以期及时处理各种情况,

如:

setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
setOnErrorListener(MediaPlayer.OnErrorListener listener)等,设置播放器时需要考虑到播放器可能出现的情况设置好监听和处理逻辑,以保持播放器的健壮性。

希望本文所述对大家Android程序设计有所帮助。

标签:Android,MediaPlayer
0
投稿

猜你喜欢

  • spring boot 动态生成接口实现类的场景分析

    2022-12-14 05:09:33
  • 处理java异步事件的阻塞和非阻塞方法分析

    2023-04-16 05:06:01
  • 如何在Android studio 中使用单例模式

    2023-03-17 21:00:38
  • MyBatis-Plus找不到Mapper.xml文件的几种解决方法

    2023-11-24 03:37:52
  • C#深拷贝方法探究及性能比较(多种深拷贝)

    2022-08-30 18:17:02
  • Spring如何利用@Value注解读取yml中的map配置

    2023-07-24 21:18:00
  • Java线程的生命周期和状态控制_动力节点Java学院整理

    2022-01-25 17:01:42
  • Android studio实现简单的计算器

    2022-09-07 23:23:28
  • Java面试题之HashMap 的 hash 方法原理是什么

    2022-09-11 20:20:54
  • Maven安装及MyEclipse中使用Maven

    2023-06-20 04:29:07
  • c#线程同步使用详解示例

    2021-06-15 19:22:58
  • 关于Feign调用服务Headers传参问题

    2022-10-31 01:48:24
  • C# List<T>的用法小结

    2021-12-03 10:40:28
  • 利用Postman和Chrome的开发者功能探究项目(毕业设计项目)

    2021-10-27 10:19:43
  • Java操作pdf的工具类itext的处理方法

    2023-07-14 11:51:53
  • Android 定时器实现图片的变换

    2021-05-28 00:33:13
  • Android Usb设备的监听(Dev)外设端口的判定以及耳机的插拔

    2022-12-07 19:23:44
  • Android中ImageView的使用方法

    2023-11-19 02:03:41
  • C# 设计模式系列教程-简单工厂模式

    2023-10-31 13:49:29
  • 深入理解Java设计模式之建造者模式

    2022-12-06 00:57:37
  • asp之家 软件编程 m.aspxhome.com