2011-11-03 8 views
11

Sto provando a scaricare un file utilizzando il DownloadManager di Android, accedere al file e scriverlo in una nuova posizione (in questo esempio sto scaricando un database che è compilato lato server e deve essere scritto nella directory/database /).Restituzione di un flusso di input da Parcel File Descriptor utilizzando Androids DownloadManager

Ho letto e sono riuscito a scaricare il file e attivare BroadcastReceiver, ma a questo punto mi blocco.

Ho restituito il file ParcelFileDecriptor ma non riesco a convertirlo in alcun flusso in alcun modo. Non riesco a decidere se ParcelFileDecriptor.AutoCloseInputStream è un'aringa rossa o meno, ma sono abbastanza sicuro che ParcelFileDecriptor abbia una relatività per uno stream, ma sto davvero cercando di risolverlo. Qualsiasi aiuto sarebbe molto apprezzato.

risposta

19

Ho lavorato a questo proposito circa 5 minuti dopo la pubblicazione e mi sento piuttosto stupido ora. In ogni caso, supponendo che hai iniziato il download già e impostare il Broadcast Reciver, il seguente codice farà il lavoro ...

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

Se siete alla ricerca di maggiori informazioni sulla sovrascrittura di una banca dati con il proprio assegno questo link (anche dove la maggior parte delle informazioni di cui sopra è venuto da):

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

+0

Si può considerare l'utilizzo di 'com.google.common.io.ByteStreams.copy (in, out)' –

+0

Hey Orian, grazie per l'input. In realtà non ho fatto alcuno sviluppo Android per molti anni. Se si utilizza la copia di bytestreams ora è il modo più preferito di spostare un flusso (che avrebbe senso sarebbe), non esitate ad aggiornare/modificare il post rispettivamente. =) – Kennifer

+0

È una libreria fornita da Google, la trovo piuttosto utile. Quando sviluppo un'app complessa per Android, dipendo da essa comunque, quindi accennare ad altri potrebbe renderti la vita più facile. –

Problemi correlati