2011-11-03 10 views
11

Estoy tratando de descargar un archivo usando el DownloadManager de Android, acceder al archivo y escribirlo en una nueva ubicación (en este ejemplo, estoy descargando una base de datos que es compilado del lado del servidor y debe escribirse en el directorio/database /).Devolver un flujo de entrada desde el descriptor de archivo de parcela usando Androids DownloadManager

He estado leyendo y he logrado descargar el archivo y activar el BroadcastReceiver, pero en este punto me quedo atascado.

He devuelto el archivo ParcelFileDecriptor pero estoy teniendo problemas para convertirlo a una secuencia de ninguna manera. No puedo decidir si ParcelFileDecriptor.AutoCloseInputStream es una pista falsa o no, pero estoy bastante seguro de que ParcelFileDecriptor tiene relatividad a una transmisión, pero realmente estoy luchando para resolverlo. Cualquier ayuda sería muy apreciada.

Respuesta

19

Lo resolví a unos 5 minutos después de publicarlo y ahora me siento un poco estúpido. De todos modos, suponiendo que haya comenzado la descarga ya, y configura el Reciver Broadcast, el siguiente código hará el trabajo ...

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

Si usted está buscando para obtener más información sobre copiar base de datos con su propio cheque este enlace (también donde la mayor parte de la información anterior ha venido de):

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

+0

Usted puede considerar el uso de 'com.google.common.io.ByteStreams.copy (iN, OUT)' Hey –

+0

Orian, gracias para la entrada. No he hecho ningún desarrollo de Android desde hace muchos años. Si el uso de copias de prueba ahora es la forma más preferida de mover una transmisión (lo que tiene sentido sería), no dude en actualizar/editar la publicación, respectivamente. =) – Kennifer

+0

Es una biblioteca proporcionada por Google, la encuentro bastante útil. Al desarrollar una aplicación compleja para Android, de todos modos dependo de ella, por lo que mencionarla para otros puede hacerles la vida más fácil. –

Cuestiones relacionadas