播放音频
来源:互联网 发布:幂法求矩阵特征值例子 编辑:程序博客网 时间:2024/04/29 23:45
http://www.jianshu.com/p/32a67329307eraw下的
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);mediaPlayer.start(); // no need to callprepare();create() does that for you
存储到文件系统里的语音文件可以播放
MediaPlayer player = new MediaPlayer();String path = "/sdcard/example.mp3";player.setAudioStreamType(AudioManager.STREAM_MUSIC);`player.setDataSource(path);player.prepare();player.start();
通过URL也可以对网络语音资源进行播放,有两种方式:URI
方式:String url = "http://........"; // your URL hereUri uri = Uri.parse(url);MediaPlayer player = new MediaPlayer();player.setAudioStreamType(AudioManager.STREAM_MUSIC);player.setDataSource(getApplicationContext(), uri);player.prepare();player.start();
URL
方式:String url = "http://........"; // your URL hereMediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setDataSource(url);mediaPlayer.prepare(); // might take long! (for buffering, etc)mediaPlayer.start();
异步prepare
在调用start
函数前,需要调用prepare
,主要进行获取并解析资源的操作,可能耗时比较长,如果运行上UI
主线程,有可能会造成ANR
,因此需要异步进行prepare
操作。MediaPlayer提供了非常简单的方法来实现异步prepare —— prepareAsync。prepareAsync
是异步操作,直接返回,当操作完成后,会调用OnPreparedListener
的onPrepared
函数,通过MediaPlayer
的setOnPreparedListener
方法来自定义onPrepared
函数,举例如下:
MediaPlayer player = new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);player.setDataSource("http://....."); // 网络资源文件// 自定义onPreparedListener接口player.setOnPreparedListener(new OnPreparedListener() { /** * prepare工作完成之后,会回调该函数 */ @Override publicvoidonPrepared(MediaPlayer mp) { mp.start(); }});player.prepareAsync();
在Service中使用MediaPlayer
如果需要在后台继续使用MediaPlayer
播放,那么就需要使用Service
,并且在Service
中管理MediaPlayer
对象。
异步执行
跟Activity
一样,Service
是运行默认运行在主线程的,因此,Service
需要快速处理传入的intent
,响应的时候不能做复杂的运算。如果需要做大量运算,则应该异步执行(启动子线程来执行运算)。
当在Service
中使用MediaPlayer
时,则应该使用prepareAsync()
来执行准备工作而不是prepare()
,并且实现MediaPlayer.OnPreparedListener
接口,在完成准备工作时,触发处理逻辑。举个例子:
publicclassMyServiceextendsServiceimplementsMediaPlayer.OnPreparedListener{ privatestaticfinal String ACTION_PLAY = "com.example.action.PLAY"; MediaPlayer mMediaPlayer = null; publicintonStartCommand(Intent intent, int flags, int startId){ // ...if (intent.getAction().equals(ACTION_PLAY)) { mMediaPlayer = ... // initialize it here mMediaPlayer.setOnPreparedListener(this); mMediaPlayer.prepareAsync(); // prepare async to not block main thread } // ... } /** prepare工作完成之后会回调该函数 */publicvoidonPrepared(MediaPlayer player){ player.start(); }}
0 0
- 音频播放
- 音频播放
- 音频播放
- 音频播放
- 播放音频
- 音频播放
- 音频播放
- 播放音频
- 音频播放
- 音频播放
- 音频播放
- 音频播放
- 播放音频
- 【音频播放】
- 音频播放
- 音频播放
- 音频播放
- 播放音频
- ios developer tiny share-20160802
- java中的IO操作总结(三)
- iOS 提交app到iTunes Connect,显示构建版本“+”号的小技巧
- iOS 的url中含有中文解决方法
- lightOJ Discovering Gold(期望DP入门)
- 播放音频
- Elasticsearch Java API(八)--搜索有相同父id的子文档
- hdu2121 Ice_cream’s world II (最小树形图模板)
- CMMI
- ubuntu中 nginx的安装
- List Control总结
- ImageUtils(bitmapUtils封装)
- android 版本更新的实现
- Qt 统计字符出现的次数