当前位置: 首页 > 编程笔记 >

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

卢阳泽
2023-03-14
本文向大家介绍Android开发之MediaPlayer基本使用方法详解,包括了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(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多媒体操作技巧汇总(音频,视频,录音等)》、《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android资源操作技巧汇总》及《Android控件用法总结》

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

 类似资料:
  • 本文向大家介绍iOS开发教程之XLForm的基本使用方法,包括了iOS开发教程之XLForm的基本使用方法的使用技巧和注意事项,需要的朋友参考一下 前言 在iOS开发中,开发"表单"界面,字段稍微多一点的一般都用UITableView来做,而XLForm就是这样一个框架,它是创建动态表格视图最牛逼的iOS库, 用它实现表单功能,非常简单,省心省力。但是很可惜,搜索了很多文章都只是翻译官方文档,很多

  • 本文向大家介绍Android开发之基本控件和四种布局方式详解,包括了Android开发之基本控件和四种布局方式详解的使用技巧和注意事项,需要的朋友参考一下 Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动。给控件添加事件也有接口回调和委托代理的方式。今天这篇博客就总结一下Android中常用的基本控件以及布局方式。说到布局方式Android和iOS还是区别挺大的,在i

  • 本文向大家介绍python图形开发GUI库pyqt5的基本使用方法详解,包括了python图形开发GUI库pyqt5的基本使用方法详解的使用技巧和注意事项,需要的朋友参考一下 一:安装PyQt5 如果你的系统没有安装pip请阅读我们的另一篇文章 windows下python安装pip方法详解 二:PyQt5简单使用 上面的示例代码在屏幕上显示一个小窗口。 应用程序的图标 应用程序图标是一个小的图像

  • 本文向大家介绍Android开发之TabActivity用法实例详解,包括了Android开发之TabActivity用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android开发之TabActivity用法。分享给大家供大家参考,具体如下: 一.简介 TabActivity继承自Activity,目的是让同一界面容纳更多的内容。TabActivity实现标签页的功能,通过

  • 本文向大家介绍Android开发之Notification通知用法详解,包括了Android开发之Notification通知用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android开发之Notification通知用法。分享给大家供大家参考,具体如下: 根据activity的生命周期,在activity不显示时,会执行onStop函数(比如按下home键),所以你在onSt

  • 本文向大家介绍Android编程开发之NotiFication用法详解,包括了Android编程开发之NotiFication用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程开发之NotiFication用法。分享给大家供大家参考,具体如下: notification就是通知的意思,安卓中指通知栏,一般用在电话,短信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小