2014-02-19 113 views
0

對於我的應用程序,我希望能夠從電子郵件附件或文件瀏覽器中打開文件,並在後臺處理它們 - 也許使用Toast提供成功/失敗的反饋。我有以下意圖過濾器設置:文件/內容意圖過濾器不適用於BroadcastReceiver活動

 <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 

      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 

      <data android:mimeType="application/octet-stream"/> 
     </intent-filter> 

     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <action android:name="android.intent.action.EDIT"/> 

      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 

      <data 
       android:mimeType="*/*" 
       android:host="*" 
       android:pathPattern=".*\\.mpb" 
       android:scheme="file"/> 
     </intent-filter> 

但是,如果我把一個BroadcastReceiver下這些過濾器的Android看似拒絕承認這些過濾器的存在。如果我在一個活動下放置完全相同的過濾器,它會正常工作。這是Android意圖過濾器的限制嗎?

現在我只是使用活動傳遞的意圖一起在我處理文件的IntentService - 一樣一樣的就是我的BroadcastReceiver會已經做了 - 然後調用finish()return;。這樣做可以完成工作,但是由於活動即時顯示並消失,因此是不好的用戶體驗。我寧願讓BroadcastReceiver工作,所以有我失蹤的東西?

回答

1

有什麼我失蹤? - 是的,我怕有。

你不使用相同的意圖過濾器接收廣播該活動的原因做的缺點是簡單的:

觸發該事件(Gmail應用程序在你的例子)的應用程序正在啓動implicit activity,而不是發送廣播。

什麼意味着,如果被髮送沒有廣播 - 那麼你可以忘掉通過BroadcastReceiver

接受它沒有工作解決這個問題,而不是推出自己的活動。

開始隱活動,而不是與ACTION_VIEW發送廣播正在有道理的,因爲畢竟 - ACTION_VIEW是所有顯示的東西,所以就沒有意義,在反應上的文件,用戶點擊 - 事情會發生只在後臺。

你正確的發射和在這種情況下imidatly整理活動是一個不好的用戶體驗,但沒有表現出任何明顯的是事件雪上加霜 - 用戶將繼續點擊,因爲他覺得沒有任何反應......

我會代替你做 - 顯示特殊的有意義的活動,它可視化你正在做的任何處理,而不僅僅是在後臺進行處理,當處理完成時 - 也完成活動。

+0

謝謝 - 這是我對事實上錯過的有意義的細節的一個很好的解釋。非常感激。 – sigmabeta

+0

@sigmabeta:很高興它幫助你: - > –

相關問題