Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Returning an Input Stream from Parcel File Descriptor using Androids DownloadManager

Tags:

java

android

I'm trying to download a file using the android DownloadManager, access the file, and write it to a new location (in this example I'm downloading a database which is compiled server side and needs to be wrote to the /database/ directory).

I've been reading up and managed to download the file, and activate the BroadcastReceiver, but at this point I get stuck.

I've returned the ParcelFileDecriptor file but I'm having trouble converting it to a stream in any way. I can't decide if the ParcelFileDecriptor.AutoCloseInputStream is a red herring or not, but I'm pretty sure the ParcelFileDecriptor has relativity to a stream, but I'm really struggling to work it out. Any help would be much appreciated.

like image 596
Kennifer Avatar asked Nov 03 '11 20:11

Kennifer


1 Answers

I worked this out about 5 minuets after posting and feel rather stupid now. Anyway, assuming you've started the download already and set up the Broadcast Reciver, the following code will do the job...

            ParcelFileDescriptor file = dMgr.openDownloadedFile(downloadId);
            File dbFile = getDatabasePath(Roads.DATABASE_NAME);

            InputStream fileStream = new FileInputStream(file.getFileDescriptor());
            OutputStream newDatabase = new FileOutputStream(dbFile);

            byte[] buffer = new byte[1024];
            int length;

            while((length = fileStream.read(buffer)) > 0)
            {
                newDatabase.write(buffer, 0, length);
            }

            newDatabase.flush();
            fileStream.close();
            newDatabase.close();

If you're looking for more information on overwriting a database with your own check this link (Also where most of the above info has come from):

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

like image 135
Kennifer Avatar answered Nov 11 '22 19:11

Kennifer