2011-11-26 19 views
11

私は特別なファイルをダウンロードして表示できるアンドロイドライブラリアプリを作っています。今私はバックグラウンドでファイルをダウンロードするサービスを書く必要があります!サービスのサンプルがありますか?バックグラウンドでサービスを利用してファイルをダウンロードする方法は?

と私はSDでファイルを保存したいと思います。ユーザーはアプリをアップデートでき、ダウンロードしたファイルを見逃してはいけません。

あなたにこれに関する提案または意見がある場合は、私にお書き添えください。

答えて

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にダウンロードして保存されて取得するコードの上に使用することができますカード。このコードは、AsysnTaskまたはthreadを使用してバックグラウンドで実行できます。

+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を拡張するクラスでそれを行うことができます。 –

関連する問題