接上一篇 android播放音频文件(MediaPlayer)和录音(MediaRecorder)--录音,接着开始讲播放网络音频文件的功能。
二、播放音频文件
传递网络音频的URL播放音频文件。
manager.player("http://5.26923.com/download/ring/000/100/96163302708ec2cf1f9d67c846aac59e.amr");
/** * 播放音频文件 * @param url 音频文件url地址 */ public void player(String url) { // 如果当前正在播放,则直接返回 if(player.isPlaying()){ Log.i("MediaManager", "MediaPlayer is playing……"); return; } try { String path = fileUtils.exists(url); // 判断是否存在缓存文件 if(path != null) { // 存在缓存文件 // 直接播放缓存文件 player.setDataSource(path); // 设置数据源 player.prepare(); // 准备(File), 同步 player.start(); // 播放音频文件 }else { // 不存在音频缓存文件,则边存边播 // 异步下载音频文件 new AudioAsyncTask().execute(url); player.setDataSource(url); // 设置数据源为网络文件 player.prepareAsync(); // 准备(InputStream), 异步 player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { // 准备完成后, 开始播放音频文件 mp.start(); } }); } } catch (IOException e) { e.printStackTrace(); } }使用异步下载音频文件到本地
/** * 异步下载音频文件 */ private class AudioAsyncTask extends AsyncTask<String, Void, Void> { @Override protected Void doInBackground(String... params) { try { URL url = new URL(params[0]); // 构建URL // 构造网络连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 保存音频文件 fileUtils.saveFile(conn.getInputStream()); conn.disconnect(); // 断开网络连接 } catch (IOException e) { e.printStackTrace(); } return null; } }使用异步下载音频文件到本地
/** * 异步下载音频文件 */ private class AudioAsyncTask extends AsyncTask<String, Void, Void> { @Override protected Void doInBackground(String... params) { try { URL url = new URL(params[0]); // 构建URL // 构造网络连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 保存音频文件 fileUtils.saveFile(conn.getInputStream()); conn.disconnect(); // 断开网络连接 } catch (IOException e) { e.printStackTrace(); } return null; } }
源代码