views:

88

answers:

1

Does anyone have a good example of using a service to download a file?

I am not sure whether to use remote or local and even if I was sure, I need a basic example to start with.

Basically, I want to start the service with the url of the file to downland and when the download is done end the service.

Google's example of services is filled with junk so I am not sure what is needed and what is not.

Your help is greatly appreciated.

A: 

Here is how to download a file without a Service. Just have a look on how to implement a service ( I never use service myself) and you will be happy ;-)

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();  
}  
Profete162
How could you be happy when you never use Service? Also, you should use buffered streams.
ognian