2011-11-26 11 views
11

Sto creando un'app per Android Library che può scaricare e mostrare file speciali. ora ho bisogno di scrivere un servizio che scarica il file in background! ci sono campioni per i servizi?come scaricare file con servizio in background?

e voglio salvare i file in SD, perché gli utenti possono aggiornare l'app e non dovrebbero mancare i file scaricati.

Se hai un suggerimento o un'opinione per questo, scrivimi, per favore.

risposta

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(); 
} 
} 

permesso: Per scrivere nella memoria esterna, è necessario aggiungere questa autorizzazione:

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

Nota: è possibile utilizzare sopra il codice per ottenere il file scaricato e salvato nella SD carta. È possibile eseguire questo codice in background utilizzando AsysnTask o thread.

+0

grazie per il vostro campione Mi può dare AsysnTask campione? – NrNazifi

+0

qui è molto buona tutorial: http: //www.vogella.de/articles/AndroidPerformance/article.html –

6

Questo è un altro esempio:

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

grazie, anche il tuo codice è come un campione di Vineet Shukla. ma i commenti nel codice sono utili per me. – NrNazifi

+0

Come ottenere questo file di download in background? – Karthick

+0

puoi farlo in una classe che estende AsyncTask. –

Problemi correlati