Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to download file with service in the background?

Tags:

android

I'm making a android library app that can download and show special files. now I need to write a service that download file in background! are there samples for services?

and I want to save files in SD, because users can update app and don't should miss downloaded files.

If you have a suggest or opinion for this, write me, please.

like image 660
NrNazifi Avatar asked Nov 26 '11 07:11

NrNazifi


People also ask

How do I run a download in the background?

Open your device's main Settings app . Under "Wireless & networks," tap Data usage. Tap the box next to "Auto-sync data." When the dialog box "Turn auto-sync data on?" appears, tap OK.

How do I enable background downloads in Safari?

When you create a mobile configuration on the Mobile Administrator page, the following check boxes must be selected on the iPhone or iPad Settings tab: Enable push notification. Enable background download mode.


2 Answers

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

Permission: To write to external storage, you need to add this permission:

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

Note: you can use above code to get the file downloaded and saved in the SD card. You can run this code in background using AsysnTask or thread.

like image 111
Vineet Shukla Avatar answered Sep 28 '22 15:09

Vineet Shukla


This is another sample:

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();
}
like image 34
Omid Nazifi Avatar answered Sep 28 '22 17:09

Omid Nazifi