2014-07-11 32 views
2

我正在開發一款支持通過Android Beam進行內容傳輸的應用程序(爲了更加準確,支持使用藍牙進行NFC啓動的內容傳輸)。我使用的是可通過NfcAdapter類,nameley知名的API,Android Beam:如何下載光束內容

nfcAdapter.setBeamPushUrisCallback(new NfcAdapter.CreateBeamUrisCallback() { 

       @Override 
       public Uri[] createBeamUris(NfcEvent event) { 
        if (singleItemToTransfer()) { 
         if (item.getLocalPath() != null) { 
          File file = new File(item.getLocalPath()); 
          return new Uri[] { Uri.fromFile(file) }; 
         } else { 
          // Download the content & pass the handle 
          // for the content being downloaded 
         } 
        } 
       } 

}, this); 

現在的問題是Android框架將如何處理的情況,其中要傳送的內容目前無法使用,但需要下載先轉移然後轉移。例如,只有照片的預覽可用,並且在選擇預覽時,應用先下載內容,然後通過Android Beam(例如藍牙)傳輸。我搜索了一下,發現有一些方法可以獲取Android DownloadManager當前下載的文件的句柄。例如,這裏有一個有趣的post。基本上,DownloadManager類存儲一個列表http下載啓動及其相關的狀態。有人建議我們根據下載是否爲「正在運行」,「正在等待」,「已暫停」等來過濾下載內容。這個列表可以被讀入一個遊標,結果中的一個列是'COLUMN_URI',這是從下載文件的URL。

對上述解決方案進行重新評估後,存在一個問題:如果內容位於雲端,該怎麼辦?說,谷歌驅動器?我進一步搜索,遇到很多帖子,例如here。顯然,下載部分仍然存在。內容需要在傳輸之前首先下載。

除了上述問題,我還想知道如果我們首先要下載內容然後返回下載完成的文件的URI,Android Beam會如何行動。爲了測試,我創建了一個模擬代碼,如Thread.sleep(_some_time_);然後在createBeamUris()調用中傳遞實際的URI。在這種情況下,Android Beam會提示用戶檢測該字段中的其他設備,然後等待上面介紹的時間量,然後發出「Tap to Beam」,這通常會給用戶帶來極其糟糕的體驗(例如,其他設備的屏幕被鎖定,NFC關閉)。隨後,我想爲正在下載的文件傳遞一個URI,然後在正在下載的同時傳輸內容!我不確定這將如何處理。我擔心修改Android Beam的工作方式是唯一的選擇。任何提示都非常感謝!

如果您認爲我錯過了一些東西,請讓我知道,我會更新帖子。

回答

0

我最終決定改變Android框架並使其工作。