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获取手机系统版本等信息的方法,供大家参考,具体内容如下:第一种代码:String phoneInfo = &qu
- 查找应用进程PID杀死应用进程PID运行启动脚本烦不烦啊,像我这么懒得人 得想个办法一步搞定!如下所示 新建一个shell脚本,然后将其运行
- 有经验的程序员应该都见过,一个方法坐拥几十上百个参数。方法为何要有参数?因为不同方法间需共享信息。但方法间共享信息的方式不止一种,除了参数列
- 这篇文章主要介绍了如何基于LoadingCache实现Java本地缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学
- 我的电脑环境win10vscode 1.36.1vscode安装插件安装完这个插件后会提示你安装 platformIOCore,按照提示安装
- 在Java的逻辑运算符中,有这么四类:&&(短路与),&,|,||(短路或)。&&和&都是表
- 目录一、Shiro简介 核心角色核心理念二、整合SpringBoot2框架 1、核心依赖2、Shiro核心配置3、域对象
- 一、搭建 mvc 环境新建一个 module 模块,创建 maven 工程,步骤跟以前一样,各种配置文件内容也可以拷贝修改一下即可。二、创建
- Spring与Hiberante整合通过hibernate的学习,我们知道,hibernate主要在hibernate.cfg.xml配置文
- Java异常简介Java异常是Java提供的一种识别及响应错误的一致性机制。Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证
- 如何获取二维数组中的元素个数呢?int[,] array = new int[,] {{1,2,3},{4,5,6},{7,8,9}};//
- java.nio.file.Files.walkFileTree是JDK7新增的静态工具方法。1.Files.walkFileTree的原理
- 线程概念进程:启动一个应用程序就叫一个进程。 接着又启动一个应用程序,这叫两个进程。每个进程都有一个独立的内存空间;进程也是程序的一次执行过
- 本文实例讲述了Java二维数组简单定义与使用方法。分享给大家供大家参考,具体如下:Java的二维数组是先创建一个一维数组,然后该数组的元素再
- SpringDataJpa like查询无效这里写自定义目录标题SpringDataJpa like查询@Query(value = &qu
- 实现二分法查找二分法查找,需要数组内是一个有序的序列二分查找比线性查找:数组的元素数越多,效率提高的越明显二分查找的效率表示:O(log2N
- EditText和AutoCompleteTextView设置文字选中颜色 大多数Android Rom上,文本选择的背景色都是很好看的鲜绿
- Spring Data JPA设置字段默认值在Column注解中写入以下两个属性,为什么自己查一下文档吧,即可实现字段默认值设置,并顺带解决
- JVM自带的类加载器:其关系如下:其中,类加载器在加载类的时候是使用了所谓的“父委托”机制。其中,除了根类加载器以外,其他的类加载器都有且只
- Android ScrollView 下嵌套 ListView 或 GridView出现问题解决办法ScrollView 下嵌套 ListV