解读Android MediaPlayer 详细使用方法
|
MediaPlayer具有非常强大的功能,对音视频的播放均提供了支持,为了保证播放期间系统的正常工作,需要设置"android.permission.WAKE_LOCK"权限。 在MediaPlayer中,根据数据源为元数据、音频文件、音频流的不同情况,有着相应的处理过程。基本的过程如下: 1)播放元数据 如果元数据位于Android工程的“res/raw”文件夹下。播放元数据的过程为: MediaPlayer mp=MediaPlayer.create(context, R.raw.sound_file_1); mp.start(); 2)播放音频文件 如果音频文件的路径为PATH_TO_FILE,播放音频文件的过程为: MediaPlayer mp=new MediaPlayer(); mp.setDataSource(PATH_TO_FILE); //设置数据源 mp.prepare(); mp.start(); 3)播放音频流 如果音频文件的URL地址为URL_ADRESS,播放音频流的过程为: MediaPlayer mp=new MediaPlayer(); mp.setDataSource(URL_ADRESS); //设置数据源 mp.prepare(); mp.start(); 下面是Android中的一个实例,介绍了Android的MediaPlayer播放器音频文件的播放、暂停、回复、停止等操作的处理流程。需要注意的是,为了获得更好的用户体验,在暂停和恢复播放时,必须对静音模式和独放模式进行处理。 代码 静音模式和独放模式的处理 public class AudioManagerStub extends Activity { private final int MP3_TO_PLAY=R.raw.testmp3; private MediaPlayer mMediaPlayer; private AudioManager mAudioManager; private static CTSResult mCTSResult; … @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //获取音频服务 mAudioManager=(AudioManager) getSystemService(Context.AUDIO_SERVICE); mMediaPlayer=MediaPlayer.create (this, MP3_TO_PLAY); //设置音频源 mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置流类型 mMediaPlayer.setLooping(false); //设置是否循环播放 mMediaPlayer.start(); //开始播放 } @Override protected void onPause() { super.onPause(); try { for (int i=0; i < AudioSystem.getNumStreamTypes(); i++) { mAudioManager.setStreamMute(i, false); //取消其他音频应用的静音 mAudioManager.setStreamSolo(i, false); //设置为非独放模式 } } catch (Exception e) { mCTSResult.setResult(CTSResult.RESULT_FAIL); finish(); } } @Override protected void onResume() { super.onResume(); try { for (int i=0; i< AudioSystem.getNumStreamTypes(); i++) { mAudioManager.setStreamMute(i, true); //设置其他音频应用静音 mAudioManager.setStreamSolo(i, true); //设置为独放模式 } } catch (Exception e) { mCTSResult.setResult(CTSResult.RESULT_FAIL); finish(); return; } Intent intent=new Intent(); intent.setClass(this, AudioManagerStubHelper.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivityForResult(intent, 1); } @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); mMediaPlayer.stop(); //停止播放 mMediaPlayer.release(); //释放资源 mCTSResult.setResult(CTSResult.RESULT_OK); finish(); } } |
解读Android MediaPlayer 详细使用方法的更多相关文章
- android WebView详细使用方法(转)
1.最全面的Android Webview详解 2.最全面总结 Android WebView与 JS 的交互方式 3.你不知道的 Android WebView 使用漏洞 如果想保证登录状态,就插入 ...
- Android MediaPlayer 常用方法介绍
Android MediaPlayer 常用方法介绍 方法:create(Context context, Uri uri) 解释:静态方法,通过Uri创建一个多媒体播放器. 方法:create(Co ...
- android MediaPlayer API大全已经方法详解(转载)
通过这张图,我们可以知道一个MediaPlayer对象有以下的状态: 1)当一个MediaPlayer对象被刚刚用new操作符创建或是调用了reset()方法后,它就处于Idle状态.当调用了rele ...
- android MediaPlayer的一些使用方法简历
这里提供一些MediaPlayer的简单方法,方便以后熟练的使用它! 1)如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlay ...
- 【Android 多媒体开发】 MediaPlayer 状态机 接口 方法 解析
作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38487967 一. MediaPlayer 状态机 介绍 ...
- Android MediaPlayer接口及状态迁移
[时间:2016-09] [状态:Open] [关键词:android,mediaplayer,播放接口,播放状态图] 引言 本文内容相对简单,作为后续处理的起点,简要整理了Android Media ...
- Android MediaPlayer的生命周期
MediaPlayer的状态转换图也表征了它的生命周期,如下: 这张状态转换图清晰的描述了MediaPlayer的各个状态,也列举了主要的方法的调用时序,每种方法只能在一些特定的状态下使用,如果使用时 ...
- PhoneGap 在 Android 上的插件开发方法介绍
移动应用开发已经成为软件开发的一个重要方向,但是移动开发面临的一个重要问题就是跨平台的问题.PhoneGap 作为一个多平台的软件开发框架,提供了一次编写多个平台的运行.目前已经支持多达 6 个移动平 ...
- (转)Android之常用功能方法大集合
这些,都是Andorid中比较常用的方法和功能,在网上搜集整理一下记录之,以备不时之需.由于经过多次转载,源文作者不确凿,在此申明,敬请见谅.不得不赞,非常实用. 1.判断sd卡是否存在 boolea ...
随机推荐
- HTML续
HTML class属性 定义和用法 class 属性规定元素的类名(classname). class 属性大多数时候用于指向样式表中的类(class).不过,也可以利用它通过 JavaScript ...
- Java 函数传入参数后,究竟发生了什么?java函数传参数原理解析
JAVA函数在传入参数A时,会在函数作用周期内生成一个与参数相同类型的局部变量B. B与A指向同一块内存区域,并且具有相同的名字如param. 在函数内所有对param的操作都是对B的操作.对B进行赋 ...
- spring boot单元测试之RestTemplate(二)
上篇博客中,简单介绍了RestTemplate,只是用到了单元测试环节,如果在正式开发环境使用RestTemplate调用远程接口,还有一些配置要做. 一.配置类 由于Spring boot没有对Re ...
- shell多线程
a='a1' b='b1' c='c1' d='d1' e='e1' ARR=($a $b $c $d $e) rd=`date +%N` for i in ${ARR[*]} do { ;>& ...
- HTML连载10-details标签&summary标签&marquee标签
1.详情(details)与概要(summary)标签 (1)作用:我们希望用尽可能少的空间来表达更多的信息,利用summary标签来描述概要信息,用details标签来描述详情信息 (2)格式: ...
- express 中间件的理解
nodejs(这指express) 中间件 铺垫: 一个请求发送到服务器,要经历一个生命周期,服务端要: 监听请求-解析请求-响应请求,服务器在处理这一过程的时候,有时候就很复杂了,将这些复杂的业务拆 ...
- Redis 学习笔记(篇四):整数集合和压缩列表
整数集合 Redis 中当一个集合(set)中只包含整数,并且元素不多时,底层使用整数集合实现,否则使用字典实现. 那么: 为什么会出现整数集合呢?都使用字典存储不行吗? 整数集合在 Redis 中的 ...
- centos安装netcat TCP UDP测试工具 简称 nc,安全界叫它瑞士军刀
centos安装netcat 今天安装swoole后,测试UDP服务需要用到netcat,然而百度了很多安装方法,并没有一个好用的.几经尝试,终于安装成功,现在就分享给大家,以供参考. 配置环境:ce ...
- SQL 对float类型列进行排序引发的异常
车祸现场 要求:根据学分和完成时间获取前200名学员,当学分相同时,完成时间较早的排在前面 可以明显看到,完成时间为4.1号的记录排在了3.27号前面. 事故原因 float 表示近似数值,存在精度损 ...
- spring boot 2.0 thymeleaf调试时正常,打包后运行报错. 找不到模板文件.
使用th:fragment 定义模板 使用 th:replace 来添加模板到需要的地方. 使用时发现一个非常奇怪的问题. 本机idea 调试环境一切正常, 但是打成jar包以后报错,提示找不到对 ...