简体   繁体   English

如何下载 MP3 文件

[英]How to download an MP3 file

I want to download an mp3 file using an AsyncTask or a thread.我想使用AsyncTask或线程下载 mp3 文件。

How can I do this?我怎样才能做到这一点?

You can do something like this...你可以做这样的事情......

When you decide to start downloading:当您决定开始下载时:

new Thread(new Runnable()
  {
  @Override
  public void run()
       {
       File out;
       Downloader DDL;
       DDL=new Downloader();
       out=new File(Environment.getExternalStorageDirectory() + "/DestFileName.txt");
       DDL.DownloadFile("SourceURL",out);

       }
    }).start();

Where the downloader class is下载器 class 在哪里

public class Downloader {

public void Downloader() 
        {
    // TODO Auto-generated method stub
    }

public boolean DownloadFile(String url, File outputFile) 
    {
    try {
      URL u = new URL(url);
      URLConnection conn = u.openConnection();
      int contentLength = conn.getContentLength();

      DataInputStream stream = new DataInputStream(u.openStream());

      byte[] buffer = new byte[contentLength];
      stream.readFully(buffer);
      stream.close();

      DataOutputStream fos = new DataOutputStream(new FileOutputStream(outputFile));
      fos.write(buffer);
      fos.flush();
      fos.close();
      } 
    catch(FileNotFoundException e) 
      {
      return false; 
      } 
    catch (IOException e) 
      {
      return false; 
      }

    return true;
    }
}

Use This Function In for Downloading Files On SDCARD使用此 Function 在 SDCARD 上下载文件

public void downloadNauhe(String url) {

    class DownloadFile extends AsyncTask<String, Integer, String> {
        @Override
        protected String doInBackground(String... url) {
            int count;
            try {
                URL url1 = new URL("http://downloads.hussainiat.com/nauhey/arsalan_haider/vol_2011_-_12/01_tum_jawab_e_zulm_dogay_-_arsalan_haider_2011_-_2012.mp3");
                URLConnection conexion = url1.openConnection();
                conexion.connect();
                int lenghtOfFile = conexion.getContentLength();
                InputStream input = new BufferedInputStream(url1.openStream());
                OutputStream output = new FileOutputStream("/sdcard/01_manum_abbas_as_-_mesum_abbas_2012.mp3");
                byte data[] = new byte[1024];
                long total = 0;
                System.out.println("downloading.............");
                while ((count = input.read(data)) != -1) {
                    total += count;
                    publishProgress((int)((total/(float)lenghtOfFile)*100));
                    output.write(data, 0, count);                   
                }
                output.flush();
                output.close();
                input.close();
            } catch (Exception e) {
            }

            return null;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            mprBar.setProgress(values[0]);
        }
    }
    DownloadFile downloadFile = new DownloadFile();
    downloadFile.execute(url);
}

Don'forget to add permission不要忘记添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Refer to this thread:参考这个线程:

android: file download in background android:后台文件下载

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM