2011-11-03 183 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開發複雜的應用程序時,無論如何都要依賴它,因此爲其他人提及可能會讓他們的生活更輕鬆。 –

相關問題