2013-08-28 37 views
3

我想創建一個從網址下載應用程序中使用類似的下載管理器 Android的代碼,但我真的不知道如何下手如何在android下載?

感謝任何幫助或任何視頻TUTS

+1

它有什麼樣的下載呢? – FabianCook

+0

簡單下載像下載ppt pdf圖像,但從url –

+0

你也可以檢查這個鏈接.. http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html –

回答

1

該代碼會下載網址從任意文件只需更換網址和位置..

public class AndroidDownloadFileByProgressBarActivity extends Activity { 

    // button to show progress dialog 
    Button btnShowProgress 

    // Progress Dialog 
    private ProgressDialog pDialog; 

    // Progress dialog type (0 - for Horizontal progress bar) 
    public static final int progress_bar_type = 0; 

    // File url to download 
    private static String file_url = " u r l"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // show progress bar button 
     btnShowProgress = (Button) findViewById(R.id.btnProgressBar); 
     // Image view to show image after downloading 
     my_image = (ImageView) findViewById(R.id.my_image); 

     /** 
     * Show Progress bar click event 
     * */ 
     btnShowProgress.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // starting new Async Task 
       new DownloadFileFromURL().execute(file_url); 
      } 
     }); 
    } 


@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case progress_bar_type: 
     pDialog = new ProgressDialog(this); 
     pDialog.setMessage("Downloading file. Please wait..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setMax(100); 
     pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
     return pDialog; 
    default: 
     return null; 
    } 
} 


class DownloadFileFromURL extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread 
    * Show Progress Bar Dialog 
    * */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     showDialog(progress_bar_type); 
    } 

    /** 
    * Downloading file in background thread 
    * */ 
    @Override 
    protected String doInBackground(String... f_url) { 
     int count; 
     try { 
      URL url = new URL(f_url[0]); 
      URLConnection conection = url.openConnection(); 
      conection.connect(); 
      // getting file length 
      int lenghtOfFile = conection.getContentLength(); 

      // input stream to read file - with 8k buffer 
      InputStream input = new BufferedInputStream(url.openStream(), 8192); 

      // Output stream to write file 
      OutputStream output = new FileOutputStream("/sdcard/downloadedfile.jpg"); 

      byte data[] = new byte[1024]; 

      long total = 0; 

      while ((count = input.read(data)) != -1) { 
       total += count; 
       // publishing the progress.... 
       // After this onProgressUpdate will be called 
       publishProgress(""+(int)((total*100)/lenghtOfFile)); 

       // writing data to file 
       output.write(data, 0, count); 
      } 

      // flushing output 
      output.flush(); 

      // closing streams 
      output.close(); 
      input.close(); 

     } catch (Exception e) { 
      Log.e("Error: ", e.getMessage()); 
     } 

     return null; 
    } 

    /** 
    * Updating progress bar 
    * */ 
    protected void onProgressUpdate(String... progress) { 
     // setting progress percentage 
     pDialog.setProgress(Integer.parseInt(progress[0])); 
    } 

    /** 
    * After completing background task 
    * Dismiss the progress dialog 
    * **/ 
    @Override 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog after the file was downloaded 
     dismissDialog(progress_bar_type); 


    } 

} 

清單文件:

<!-- Permission: Allow Connect to Internet --> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <!-- Permission: Writing to SDCard --> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <!-- Download Button --> 
    <Button android:id="@+id/btnProgressBar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Download File with Progress Bar" 
     android:layout_marginTop="50dip"/> 



</LinearLayout> 
+0

如果您想發佈完整的結果,請務必添加.xml值&.xml佈局。 – JavaDM

+0

真的我想這不過,但直到現在我不知道這是否工作 謝謝,這是我的想法:) –

+0

如果你想幫我擺脫問題禁令,然後請upvote http://stackoverflow.com/問題/ 18403488 /無法-連接到我的-的Android手機 – Prakhar

2

那是很容易的 http://developer.android.com/reference/android/app/DownloadManager.html

例子:http://androidtrainningcenter.blogspot.co.at/2013/05/android-download-manager-example.html

/** 
* Start Download 
*/ 
public void startDownload() { 
    DownloadManager mManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
    Request mRqRequest = new Request(
      Uri.parse("http://androidtrainningcenter.blogspot.in/2012/11/android-webview-loading-custom-html-and.html")); 
    mRqRequest.setDescription("This is Test File"); 
// mRqRequest.setDestinationUri(Uri.parse("give your local path")); 
    long idDownLoad=mManager.enqueue(mRqRequest); 
} 

但可以肯定你分鐘。在API 9

+0

hhhhh多數民衆贊成在那裏很容易,但真的非常感謝這是soooooooooooo有用的再次感謝:)我讚賞 –

+0

它不會產生NetworkOnMainThreadException如果我沒有錯? – Mohit

+0

@mohit:爲什麼應該發生這種異常? – JavaDM

0

這是從url下載圖片的java代碼,您也可以使用它與android應用程序

public static void main(String ar[]) throws IOException 
     { 
      URL url = new URL("http://zeroturnaround.com/wp-content/uploads/2013/06/no-button-640x480-sky.jpg"); 
      InputStream ios= url.openStream(); 

       OutputStream fou1=new FileOutputStream("/home/delta/Desktop/image.jpg"); 
       byte[] b=new byte[2048]; 
       int length; 
       while((length=ios.read(b))!=-1) 
       { 
        fou1.write(b,0,length); 

       } 
       //fio1.close(); 
       fou1.close(); 

     }