2011-11-03 185 views
11

我试图使用android DownloadManager下载文件并访问该文件并将其写入新位置(在本例中我正在下载一个数据库编译服务器端,需要写入到/ database /目录)。使用Android从Parcel文件描述符返回输入流DownloadManager

我一直在阅读和设法下载文件,并激活BroadcastReceiver,但在此时我卡住了。

我已经返回了ParcelFileDecriptor文件,但我无法以任何方式将其转换为流。我不能确定ParcelFileDecriptor.AutoCloseInputStream是否是一个红色鲱鱼,但我很确定ParcelFileDecriptor与流有相关性,但我真的很努力去解决它。任何帮助将非常感激。

回答

19

我发布后约5个小时,我觉得现在感觉很愚蠢。总之,假设你已经开始下载并设置广播Reciver,下面的代码将做的工作......

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

如果您正在寻找更多的信息,用自己的检查覆盖数据库这个链接(同样,大部分的上述信息的有来自):

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

+0

您可以考虑使用'com.google.common.io.ByteStreams.copy(IN,OUT)' –

+0

嘿orian,谢谢为输入。多年来,我还没有做过任何的Android开发。如果使用字节流,复制现在是移动流的更优选方式(这是合理的),请随时分别更新/编辑该文章。 =) – Kennifer

+0

这是一个由Google提供的库,我觉得它非常有用。在为Android开发复杂的应用程序时,无论如何都要依赖它,因此为其他人提及可能会让他们的生活更轻松。 –

相关问题