专栏首页AnRFDevAndroid 使用URLConnection下载音频文件

Android 使用URLConnection下载音频文件

本文链接: Android 使用URLConnection下载音频文件

使用MediaPlayer播放在线音频,请参考Android MediaPlayer 播放音频

有时候我们会需要下载音频文件。这里提供一种思路,将在线音频文件通过流写到本地文件中。 使用URLConnection来建立连接,获取到的数据写到文件中。

URLConnection建立连接后,可以获取到数据长度。由此我们可以计算出下载进度。

public class DownloadStreamThread extends Thread {
    String urlStr;
    final String targetFileAbsPath;

    public DownloadStreamThread(String urlStr, String targetFileAbsPath) {
        this.urlStr = urlStr;
        this.targetFileAbsPath = targetFileAbsPath;
    }

    @Override
    public void run() {
        super.run();
        int count;
        File targetFile = new File(targetFileAbsPath);
        try {
            boolean n = targetFile.createNewFile();
            Log.d(TAG, "Create new file: " + n + ", " + targetFile);
        } catch (IOException e) {
            Log.e(TAG, "run: ", e);
        }
        try {
            URL url = new URL(urlStr);
            URLConnection connection = url.openConnection();
            connection.connect();
            int contentLength = connection.getContentLength();
            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream(targetFileAbsPath);

            byte[] buffer = new byte[1024];
            long total = 0;
            while ((count = input.read(buffer)) != -1) {
                total += count;
                Log.d(TAG, String.format(Locale.CHINA, "Download progress: %.2f%%", 100 * (total / (double) contentLength)));
                output.write(buffer, 0, count);
            }
            output.flush();
            output.close();
            input.close();
        } catch (Exception e) {
            Log.e(TAG, "run: ", e);
        }
    }
}

启动下载,即启动线程。

new DownloadStreamThread(urlStr, targetFileAbsPath).start();

值得注意的是,如果本地已经有了文件,需要做一些逻辑判断。例如是否删掉旧文件,重新下载。或是判断出已有文件,中止此次下载任务。

例如可以用connection.getContentLength()与当前文件长度来比较,如果不一致,则删掉本地文件,重新下载。

实际上,URLConnection能处理很多流媒体。在这里是用来下载音频文件。可以实现下载功能和类似“边下边播”的功能。

代码可以参考示例工程: https://github.com/RustFisher/android-MediaPlayer

更多参考:

Android MediaPlayer 基础简介

Android MediaPlayer 播放音频

Android 使用URLConnection下载音频文件

Android MediaPlayer 音频倍速播放,调整播放速度

Android音视频相关文章请参考 https://rustfisher.com/tags/Android-Media/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android 使用URLConnection下载音频文件的方法

    使用MediaPlayer播放在线音频,请参考Android MediaPlayer 播放音频

    砸漏
  • Android开发使用URLConnection进行网络编程详解

    本文实例讲述了Android开发使用URLConnection进行网络编程。分享给大家供大家参考,具体如下:

    砸漏
  • Android MediaPlayer 音频倍速播放,调整播放速度

    现在市面上的很多音视频App都有倍速播放的功能,例如把播放速度调整为0.5、1.5、2倍等等。

    AnRFDev
  • Android MediaPlayer 播放音频

    主要介绍使用MediaPlayer播放音频的方式。关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPlayer 基础简介。

    AnRFDev
  • 短视频直播源码,使用URLConnection下载一张图片

    以上就是短视频直播源码,使用URLConnection下载一张图片相关的代码, 更多内容欢迎关注之后的文章

    yunbaokeji柯基
  • Android使用Xutil3.0下载文件.md

    Dream城堡
  • Android 文件下载通知问题小结

    和尚之前在 Android 处理文件下载过程中遇到以下几个小问题,和尚简单整理一下;

    阿策小和尚
  • Android开发(22)使用DownloadManager下载文件

    使用DownloadManager 是个很好用的下载方式。它会出现在任务栏,指示当前的下载位置。它使用广播来接收完成消息,点击任务事件的交互。

    zhangyunfeiVir
  • 学习|Android检测并自动下载安装包(Kotlin)

    上一篇文章《学习|Android使用TTS语音合成》我们学习了Android用TTS语音合成播放声音,其中因为要播放中文,所以需要下载讯飞的语音合成包,项目应用...

    Vaccae
  • Android网络 | URL和URLConnection详解及其实战案例

    凌川江雪
  • 高频面试点:Android性能优化之内存优化(下篇)

    链接:https://juejin.im/post/5e72b2d151882549236f9cb8

    陈宇明
  • Android开发使用HttpURLConnection进行网络编程详解【附源码下载】

    本文实例讲述了Android开发使用HttpURLConnection进行网络编程。分享给大家供大家参考,具体如下:

    砸漏
  • Android使用WebView实现文件下载功能

    本文实例为大家分享了WebView实现文件下载功能的具体代码,供大家参考,具体内容如下

    砸漏
  • Android使用Handler实现下载文件功能

    本文实例为大家分享了Android实现下载文件的具体代码,供大家参考,具体内容如下

    砸漏
  • Android开发高级进阶——多线程(实现简单下载器)

    Android3.0以及以后的版本中,禁止在主线程执行网络请求,否则会抛出异常,可见在UI线程中执行耗时操作是不推荐的行为。所以,在进行与耗时操作同步进行的操作...

    trampcr
  • 浅谈Android开发者2017年最值得关注的25个实用库

    这是在2017年发布的25个最好的Android开发库的列表。所有这些都值得尝试 。 以下不是排名顺序。 让我们开始吧!

    砸漏
  • 下载《极客时间》音视频(三)使用

    iOSDevLog
  • 使用HttpDownLoadHelper下载文件

    易墨
  • http编程系列(一)——URL使用和爬取博客图片小DEMO

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    逝兮诚

扫码关注云+社区

领取腾讯云代金券