下载Android中的mp3文件问题

时间:2011-07-19 09:56:29

标签: android download httpurlconnection

我创建了一个应用程序,允许用户下载音频文件并将其存储在SD卡中。下面的代码实际上正在工作,但问题是每次我点击下载按钮,整个应用程序冻结,直到下载结束。我怎样才能解决这个问题,以便每当我点击下载按钮时它都不会冻结?请帮助我,我一直在努力寻找解决方案,我非常感谢你的帮助。提前谢谢。

尝试{

            URL url = new URL("http://www.yourfile.mp3");
            HttpURLConnection c = (HttpURLConnection) url.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();

            String PATH = Environment.getExternalStorageDirectory()
                    + "/download/";
            Log.v("", "PATH: " + PATH);
            File file = new File(PATH);
            file.mkdirs();

             String fileName = "yourfilename.mp3";

            File outputFile = new File(file, fileName);
            FileOutputStream fos = new FileOutputStream(outputFile);

            InputStream is = c.getInputStream();

            byte[] buffer = new byte[1024];
            int len1 = 0;
            while ((len1 = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len1);
            }
            fos.close();
            is.close();

            }catch (IOException e) {
                   e.printStackTrace();
            }

        }

2 个答案:

答案 0 :(得分:1)

由于您的下载方法可以下载您的文件,因此会产生应用已冻结的印象。但事实是你的方法正在后面执行。因此,为了避免应用程序冻结,您可以显示ProgressDialog直到下载方法正在下载,并且在执行后您可以取消ProgressDialog。

所以你必须使用一个单独的线程来下载。这是一个链接,它解释了如何同时下载和显示progressDialog。

http://www.bogotobogo.com/Android/android23HTTP.html

答案 1 :(得分:0)

每次单击按钮调用AsynchTask。请在doInBackground方法中下载。 this类的设计完全适用于您正在寻找的工作类型。使用doInBackground()方法完成任务,而onPreExecute则可以显示进度对话框。