Android MediaPlayer基本使用方式

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

JAVA代码部分:

public class MediaPlayerStudy extends Activity {

private Button bplay,bpause,bstop;

private MediaPlayer mp = new MediaPlayer();

@Override

public void onCreate(Bundle savedInstanceState) {

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) 怎样设置要播放的文件:

个来源:

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笔记】MediaPlayer基本用法的更多相关文章

  1. Android笔记: ViewPager基本用法

    ViewPager控件可以实现多个View(或fragment)滑动切换的效果,属于比较常用的控件.下面用一个简单的例子介绍一下该控件的基本用法. 首先是布局文件activity_view_pager ...

  2. Android笔记: ListView基本用法-ArrayAdapter

    ListView实现过程: 新建适配器->添加数据源到适配器->视图加载适配器 数据适配器: 把复杂的数据(数组.链表.数据库.集合等)填充在制定的试图界面上. 两种常用数据适配器 Arr ...

  3. android中MediaPlayer类的用法

    用法直接看sample package com.turtle920.androidaudioprocess; import android.media.MediaPlayer; import andr ...

  4. android的logcat详细用法

    Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命 令来查看和使用. 使用logcat命令 你可以用 logc ...

  5. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...

  6. 怎么通过activity里面的一个按钮跳转到另一个fragment(android FragmentTransaction.replace的用法介绍)

    即:android FragmentTransaction.replace的用法介绍 Fragment的生命周期和它的宿主Activity密切相关,几乎和宿主Activity的生命周期一致,他们之间最 ...

  7. Android开发中Bundle用法包裹数据(转)

    Android开发中Bundle用法包裹数据 Bundle的经典用法,包裹数据放入Intent中,目的在于传输数据. SDK 里是这样描述: A mapping from String values ...

  8. 【转】Android各种Adapter的用法

    转自:http://my.oschina.net/u/658933/blog/372151 Android各种Adapter的用法 发表于5个月前(2015-01-27 10:56)   阅读(143 ...

  9. Android SurfaceView + MediaPlayer实现分段视频无缝播放

    Android当中实现视频播放的方式有两种,即:通过VideoView实现或者通过SurfaceView + MediaPlayer实现. 由浅至深,首先来看下想要在Android上播放一段视频,我们 ...

  10. android application类的用法

    android application类的用法 Application是android系统Framework提供的一个组件,它是单例模式(singleton),即每个应用只有一个实例,用来存储系统的一 ...

随机推荐

  1. tmpfs(/dev/shm)

    tmpfs是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似像,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储.而且传统的ramdisk是个块 ...

  2. Shell编程中Shift的用法(转)

    位置参数可以用shift命令左移.比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1.$2.$3丢弃,$0不移动.不带参数的shift命令相当于shift 1. 非常 ...

  3. elf格式分析

    近期研究了一下elf文件格式,发现好多资料写的都比較繁琐,可能会严重打击学习者的热情,我把自己研究的结果和大家分享,希望我的描写叙述可以简洁一些. 一.基础知识 elf是一种文件格式,用于存储Linu ...

  4. 怎么获取Spring的ApplicationContext

    在 WEB 开发中,可能会非常少须要显示的获得 ApplicationContext 来得到由 Spring 进行管理的某些 Bean, 今天我就遇到了,在这里和大家分享一下, WEB 开发中,怎么获 ...

  5. POJ 2778 AC自己主动机+矩阵幂 不错的题

    http://poj.org/problem?id=2778 有空再又一次做下,对状态图的理解非常重要 题解: http://blog.csdn.net/morgan_xww/article/deta ...

  6. Android登陆界面实现-支持输入框清楚和震动效果功能

    演示效果 主要代码例如以下 自己定义的一个EditText.用于实现有文字的时候显示能够清楚的button: import android.content.Context; import androi ...

  7. hive字符串函数

    1. 字符串长度函数:length 语法: length(string A) 返回值: int 说明:返回字符串A的长度 举例: hive> select length('abcedfg') f ...

  8. Android----------WindowManager

    我们Android平台是一个又一个的Activity组成的,每个Activity有一个或者多个View构成.所以说.当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后全部的操作 ...

  9. JSON支持什么对象/类型?

    原文:JSON支持什么对象/类型? 当一个面试官问你: JSON都支持什么对象/类型?你怎么回答? 也许他的本意是下面这个答案: JSON格式支持的数据类型有以下: 类型 描述 Number 在Jav ...

  10. Loser应该知道的6个残酷人生事实(血泪翻译)

    Loser应该知道的6个残酷人生事实(血泪翻译) - Acfun - 天下漫友是一家 Loser应该知道的6个残酷人生事实(血泪翻译)