zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    MySQLCluster架构图文详解
    Request.ServerVariables大全,写到这里方便查找
    如何修改表的标识列
    如何在存储过程中,调用另一存储过程的结果集
    自我简介
    第二个web网页
    第一个网页感想
    C语言I博客作业03
    ES基本搜索(1)
    ES的入门学习
  • 原文地址:https://www.cnblogs.com/rustfisher/p/11576548.html
Copyright © 2011-2022 走看看