2011-11-26 61 views
11

我正在製作一個可以下載和顯示特殊文件的android庫應用程序。現在我需要編寫一個在後臺下載文件的服務!有服務樣本嗎?如何在後臺下載帶有服務的文件?

我想將文件保存在標清,因爲用戶可以更新應用程序,不應該錯過下載的文件。

如果您對此有任何建議或意見,請寫信給我。

回答

11
try { 
    URL url = new URL("url from apk file is to be downloaded"); 
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
    urlConnection.setRequestMethod("GET"); 
    urlConnection.setDoOutput(true); 
    urlConnection.connect(); 

    File sdcard = Environment.getExternalStorageDirectory(); 
    File file = new File(sdcard, "filename.ext"); 

    FileOutputStream fileOutput = new FileOutputStream(file); 
    InputStream inputStream = urlConnection.getInputStream(); 

    byte[] buffer = new byte[1024]; 
    int bufferLength = 0; 

    while ((bufferLength = inputStream.read(buffer)) > 0) { 
     fileOutput.write(buffer, 0, bufferLength); 
    } 
    fileOutput.close(); 

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

權限:要寫入外部存儲,你需要添加此權限:

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

注:你可以用上面的代碼來獲取文件下載並保存在SD卡。您可以使用AsysnTaskthread在後臺運行此代碼。

+0

感謝您的樣品 你能給我AsysnTask樣本? – NrNazifi

+0

這裏是非常好的教程:http://www.vogella.de/articles/AndroidPerformance/article.html –

6

這是另一個例子:

try { 
     //set the download URL, a url that points to a file on the internet 
     //this is the file to be downloaded 
     URL url = new URL("http://somewhere.com/some/webhosted/file"); 

     //create the new connection 
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

     //set up some things on the connection 
     urlConnection.setRequestMethod("GET"); 
     urlConnection.setDoOutput(true); 

     //and connect! 
     urlConnection.connect(); 

     //set the path where we want to save the file 
     //in this case, going to save it on the root directory of the 
     //sd card. 
     File SDCardRoot = Environment.getExternalStorageDirectory(); 
     //create a new file, specifying the path, and the filename 
     //which we want to save the file as. 
     File file = new File(SDCardRoot,"somefile.ext"); 

     //this will be used to write the downloaded data into the file we created 
     FileOutputStream fileOutput = new FileOutputStream(file); 

     //this will be used in reading the data from the internet 
     InputStream inputStream = urlConnection.getInputStream(); 

     //this is the total size of the file 
     int totalSize = urlConnection.getContentLength(); 
     //variable to store total downloaded bytes 
     int downloadedSize = 0; 

     //create a buffer... 
     byte[] buffer = new byte[1024]; 
     int bufferLength = 0; //used to store a temporary size of the buffer 

     //now, read through the input buffer and write the contents to the file 
     while ((bufferLength = inputStream.read(buffer)) > 0) { 
       //add the data in the buffer to the file in the file output stream (the file on the sd card 
       fileOutput.write(buffer, 0, bufferLength); 
       //add up the size so we know how much is downloaded 
       downloadedSize += bufferLength; 
       //this is where you would do something to report the prgress, like this maybe 
       updateProgress(downloadedSize, totalSize); 

     } 
     //close the output stream when done 
     fileOutput.close(); 

//catch some possible errors... 
} catch (MalformedURLException e) { 
     e.printStackTrace(); 
} catch (IOException e) { 
     e.printStackTrace(); 
} 
+0

也謝謝 你的代碼就像Vineet Shukla的樣本。但在代碼中對我有用的評論。 – NrNazifi

+0

如何在後臺實現這個下載文件? – Karthick

+0

你可以在擴展AsyncTask的類中完成。 –

相關問題