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. CF 316C2(Tidying Up-二分图最大边权)

    C2. Tidying Up time limit per test 4 seconds memory limit per test 256 megabytes input standard inpu ...

  2. python爬行动物集合360联想词搜索

    想法和一些代码引用邸一幕python培训黄哥python爬虫联想词视频,但是太罗嗦.顺便整理,而到现在为止,360不傻.它已演变,用原来的方式,有些bug,这接着说. 正题例如以下: 语言:pytho ...

  3. Flume传输数据事务分析

    Flume传输数据事务分析 本文基于ThriftSource,MemoryChannel,HdfsSink三个组件,对Flume传输数据的事务进行分析.假设使用的是其它组件.Flume事务详细的处理方 ...

  4. java泛型 之 入门(interface)

    一:泛型简单介绍: (1)所谓泛型,就是变量类型的參数化. 泛型是JDK1.5中一个最重要的特征.通过引入泛型,我们将获得编译时类型的安全和执行时更小的抛出ClassCastException的可能. ...

  5. hdu2102(bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 分析:bfs求最短时间到达'P'点,不过本题有好几个trick,我都踩到了,自己还是太嫩了... ...

  6. hdu4003(树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 题意:给定一棵n个节点的树,遍历每条数边都需要费用cost,现在给定k个机器人,要求用这个k个机 ...

  7. redhat linux 5上创建本地yum源

    1.挂载光驱 [root@rh5rac1 ~]#mkdir -p /mnt/cdrom [root@rh5rac1 ~]#mount /dev/cdrom /mnt/cdrom 2.将redhat光盘 ...

  8. 完美攻略心得之圣魔大战3(Castle Fantisia)艾伦希亚战记(艾伦西亚战记)包含重做版(即新艾伦希亚战记)

    (城堡幻想曲3,纠正大家个错误哦,不是圣魔大战3,圣魔大战是城堡幻想曲2,圣魔大战不是个系列,艾伦西亚战记==艾伦希亚战记,一个游戏日文名:タイトル キャッスルファンタジア -エレンシア戦記-リニュー ...

  9. http协议之cookie标准RFC6265介绍

      [Docs] [txt|pdf] [draft-ietf-httpst...] [Diff1] [Diff2] [Errata] PROPOSED STANDARD Errata Exist In ...

  10. 世纪互联、微软Azure与无穷小微积分

              今年9月25日,世纪互联正式开通微软Azure商用服务,有感.          我是世纪互联创业历程的见证人(之中的一个),现在看到世纪互联推出微软Azure公有云的商用服务,心 ...