/*** date:2021/5/12* author:wsm(admin)* funcation:文件下载工具类*/
public class DownloadUtil {private static DownloadUtil downloadUtil;private final OkHttpClient okHttpClient;public static DownloadUtil get() {if (downloadUtil == null) {downloadUtil = new DownloadUtil();}return downloadUtil;}private DownloadUtil() {okHttpClient = new OkHttpClient();}public static ArrayList<String> getFileName(String fileAbsolutePaht, String type) {ArrayList<String> result = new ArrayList<String>();File file = new File(fileAbsolutePaht);File[] files = file.listFiles();for (int i = 0; i < files.length; ++i) {if (!files[i].isDirectory()) {String fileName = files[i].getName();if (fileName.trim().toLowerCase().endsWith(type)) {result.add(fileName);}}}return result;}/*** 查询音频文件是否存在本地** @param name 文件名称如11.mp3* @param path 存储路径 如/storage/emulated/0/1video* @param type 类型 .mp3 .mp4* @return*/public static boolean fileIsExists(String name, String path, String type) {//这个方法是获取内部存储的根路径boolean pdtemp = false;ArrayList<String> ss = getFileName(path, type);for (String s : ss) {Log.d("TAG", "file:" + s);if (s.equals(name)) pdtemp = true;}File file = new File(name);System.out.println(file);if (!pdtemp) {// 文件不存在return false;}return true;}/*** @param url          下载连接* @param destFileDir  下载的文件储存目录* @param destFileName 下载文件名称* @param listener     下载监听*/public void download(final String url, final String destFileDir,final String destFileName, final OnDownloadListener listener) {Request request = new Request.Builder().url(url).build();okHttpClient.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {// 下载失败监听回调listener.onDownloadFailed(e);}@Overridepublic void onResponse(Call call, Response response) throws IOException {InputStream is = null;byte[] buf = new byte[2048];int len = 0;FileOutputStream fos = null;// 储存下载文件的目录File dir = new File(destFileDir);if (!dir.exists()) {dir.mkdirs();}File file = new File(dir, destFileName);try {is = response.body().byteStream();long total = response.body().contentLength();fos = new FileOutputStream(file);long sum = 0;while ((len = is.read(buf)) != -1) {fos.write(buf, 0, len);sum += len;int progress = (int) (sum * 1.0f / total * 100);// 下载中更新进度条listener.onDownloading(progress);}fos.flush();// 下载完成listener.onDownloadSuccess(file);} catch (Exception e) {listener.onDownloadFailed(e);} finally {try {if (is != null)is.close();} catch (IOException e) {}try {if (fos != null)fos.close();} catch (IOException e) {}}}});}public interface OnDownloadListener {/*** @param file 下载成功后的文件*/void onDownloadSuccess(File file);/*** @param progress 下载进度*/void onDownloading(int progress);/*** @param e 下载异常信息*/void onDownloadFailed(Exception e);}
}
 case R.id.btn_start:if (type.equals("audio")) {//下载播放音频或者视频//播放音频文件/查询本地是否存在,是则直接获取本地文件播放,否则下载播放//三个参数,这里按照自己名称传,我是接口返回的所以进行了名称截取查询,第二个参数是你要保存的路径,第三个参数是类型比如音频.mp3,视频.mp4if (DownloadUtil.fileIsExists(StringUtils.Stringbehind(substring, "/") + ".mp3", "/storage/emulated/0/1video", ".mp3")) {playSound("/storage/emulated/0/1video" + substring + ".mp3");} else {downFile(name.substring(name.lastIndexOf("/")), name, ".mp3");}return;}break;
 /*** 下載文件** @param name 需要保存的文件名称* @param urlString  存储目录 type 类型*/public void downFile(String name, String urlString, String type) {DownloadUtil.get().download(urlString, Environment.getExternalStorageDirectory().getAbsolutePath() + "/1video", name + type, new DownloadUtil.OnDownloadListener() {@Overridepublic void onDownloadSuccess(File file) {Looper.prepare();//增加部分playSound(file.toString());//下载完成进行播放Looper.loop();//增加部分}@Overridepublic void onDownloading(int progress) {
//                progressDialog.setProgress(progress);}@Overridepublic void onDownloadFailed(Exception e) {}});}//播放private void playSound(String path) {mMediaPlayer = new MediaPlayer();try {mMediaPlayer.setDataSource(path);mMediaPlayer.prepare();mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mediaPlayer) {mMediaPlayer.start();}});mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mediaPlayer) {if (mMediaPlayer.isPlaying()) {} else {mMediaPlayer.release();}}});} catch (IOException e) {e.printStackTrace();}}

Android实现网络音频或视频文件下载本地进行播放相关推荐

  1. Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)

    Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲) 准备 1.储存在raw文件夹 2. ...

  2. 无法播放音频文件你的计算机,Win7电脑音频、视频等文件无法播放怎么办?

    最近,有位Win7系统用户在电脑中播放从网上下载的音频.视频等文件时发现无法播放该类型的文件.那么,遇到无法播放的文件类型该怎么办?其实,我们可以使用文件格式转换器来解决此问题.下面,小编就来和大家分 ...

  3. android 音频转码慢,适用于Android的最佳音频和视频转码抑制软件

    Tone是迄今为止最全面的音频/视频编辑应用程序. 声音最流行的功能是MP3播放器和MP4剪切. 但这不是剪切MP3歌曲或视频的简单工具. •音频/视频拆分器: 语音的这一特殊功能使您可以将任何音频或 ...

  4. 腾讯视频 android 2倍,腾讯视频多倍速播放产品设计小结

    观看是腾讯视频对于用户来说最为核心的体验,我们不断努力把精力聚焦在用户观看过程的体验优化,为用户创造更流畅有和趣的观看体验.近期其中一个探索是多倍速播放的尝试,此文向大家分享下我们在这次产品设计方案中 ...

  5. 网络课程学习视频的快进播放和去除鼠标移动视频暂停的问题

    问题: 1. 视频播放,鼠标移动或者切换页面,打开其他软件或者文件,视频暂停,如何解决? 2. 很多网络学习视频学习时,不能快进播放,太慢,耗时间,如何让视频能加速播放? 解决方案: 亲测有效, 问题 ...

  6. Xamarin的播放音频和视频的媒体管理插件

    媒体应用程序比其他应用程序更受益于与本地平台一起工作.有些事情,比如处理音频焦点的中断.网络连接以及通知和其他回放控件之间的通信,这是一件复杂的事情. 为使Xamarin开发访问这些本地平台的功能,我 ...

  7. 在页面中嵌入音频和视频的代码

    http://blog.csdn.net/dahuagogo/archive/2005/04/30/368939.aspx 一) 在网页中适当嵌入音频和视频能够充分显示网页的多媒体特性,特别是随着宽带 ...

  8. 音频、视频Flash文件(萌新必看)

    <个人学习笔记八> embed标记 使用embed标记,可以播放的文件类型有MiNi.Mav.AIFF.SWF.AV.MP3.MOV.AVI等 语法说明 width . height:整型 ...

  9. android播放mp3方法,Android之MediaPlayer播放音频与视频

    本节带来的是Android多媒体中的--MediaPlayer,我们可以通过这个API来播放音频和视频 该类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码 和播放 ...

最新文章

  1. 用Lighttpd做图片服务器
  2. H3C 单区域OSPF配置示例二
  3. 【poj2464】树状数组
  4. Struts2学习笔记《二》
  5. 随机投点法计算定积分java_11 随机模拟积分 | 统计计算
  6. (转)Arcgis for javascript实现百度地图ABCD marker的效果
  7. undefined reference to `inflateInit2_'
  8. 数据结构笔记(三)-- 链式实现顺序表
  9. mysql判断后执行查询语句吗_如何看mysql执行的sql语句
  10. AD ---- 活动目录的日常管理操作(3)
  11. 行为型设计模式:模板模式
  12. 某宝在售资源合集,整整1218份!
  13. C# 22. 新建文件夹
  14. 学习笔记-基于全局和局部对比自监督学习的高分辨率遥感图像语义分割-day1
  15. 利用python的turtle库绘制玫瑰的步骤_用python turtle画玫瑰
  16. BSGSexBSGS(让你轻松理解和掌握)
  17. 基于ESP32+AMG8833的物联网红外成像测温枪
  18. 单片机是不是嵌入式呢,老生常谈了
  19. 【语音去噪】基于matlab低通滤波器语音去噪【含Matlab源码 1900期】
  20. Storm开源一周年

热门文章

  1. 毕业设计 深度学习乳腺癌分类
  2. 风控数据分析笔记-业务层面
  3. 排序算法(1)冒泡排序
  4. Winform 中设置TextBox获取焦点和全选
  5. luogu2431 正妹吃月饼
  6. Jmeter(1)----下载jmeter并运行一个简单用例
  7. MFC对话框如何使用工具栏并修改工具栏的背景颜色与自绘对话框统一(二)
  8. 【Teradata】DBQL使用
  9. 机器学习与Python应用(一)
  10. vue2高仿饿了么app