2012-11-17 81 views
9

我需要用我的應用程序打開帶有自定義擴展名的文件。當文件位於我的SD卡中時,我可以使用Intent過濾器執行此操作。如果該文件作爲Gmail附件發送,我還可以查看「下載」和「預覽」按鈕。但是,當我點擊下載/預覽按鈕時,我收到了消息 - 「對不起,附件無法下載」Android - 用我的應用程序打開Gmail附件

我認爲這是我的應用程序的問題。但我有一個隨意的想法,並在我的手機上安裝了「下載所有文件」應用程序。 https://play.google.com/store/apps/details?id=com.hwkrbbt.downloadall&hl=en 然後,當我點擊Gmail中的下載按鈕時,建議下載所有文件和我的應用程序用於下載文件。我選擇了我的應用程序,並且一切正常!

這是一些安全問題? 這是我的意圖過濾器:

<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="*/*" /> 
     <data android:scheme="content" android:host="*" 
      android:pathPattern=".*\\.ate" /> 
     <data android:scheme="file" android:host="*" 
      android:pathPattern=".*\\.ate" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="application/*" host="*" android:pathPattern=".*.ate" android:scheme="content" /> 
    </intent-filter> 

編輯:下面是完整的活動標籤。

<activity android:name=".TestApp" 
       android:label="@string/app_name" 
       android:configChanges="orientation|keyboardHidden" 
       android:launchMode="singleTask"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="com.TestApp.TestApp.NOTIFICATION" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
     <!-- Opening .ate file start --> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:scheme="file" /> 
      <data android:host="*" /> 
      <data android:pathPattern=".*\\.ate" /> 
      </intent-filter> 
    <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="*/*" /> 
     <data android:scheme="content" android:host="*" 
      android:pathPattern=".*\\.ate" /> 
     <data android:scheme="file" android:host="*" 
      android:pathPattern=".*\\.ate" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW"/> 
     <category android:name="android.intent.category.BROWSABLE"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <data android:scheme="file" android:pathPattern=".*\\.ate" android:mimeType="application/octet-stream"/> 
     <data android:scheme="content" android:pathPattern=".*\\.ate" android:mimeType="application/octet-stream"/> 
     </intent-filter> 
     <!-- Opening .ate file end --> 
    </activity> 
+0

您是否嘗試過**機器人:主機= 「的Gmail-LS」 **? –

回答

9

我想出了自己,所以我發佈的解決方案,以防萬一有人遇到這個奇怪的問題。

的意圖過濾器既需要內容和文件類型的方案,與MIME類型應用程序/ octetstream

<intent-filter> 
<action android:name="android.intent.action.VIEW"/> 
<category android:name="android.intent.category.BROWSABLE"/> 
<category android:name="android.intent.category.DEFAULT"/> 
<data android:scheme="file" android:pathPattern=".*\\.inform" android:mimeType="application/octet-stream"/> 
<data android:scheme="content" android:pathPattern=".*\\.inform" android:mimeType="application/octet-stream"/> 

+0

嗨藍色,你能分享完整的標籤嗎? – Giuseppe

+0

嗨朱塞佩,請檢查我的問題。我添加了一個編輯。 – Manju

+3

我試過這個解決方案,它的工作原理,但它是誤導,因爲'pathPattern'將被忽略。除非還爲過濾器指定了'scheme'和'host'屬性(您的答案缺少'host'屬性),否則將忽略'pathPattern'屬性。有關'pathPattern'屬性的信息,請參見[documentation](http://developer.android.com/guide/topics/manifest/data-element.html)。我在練習中也看到了這一點。意圖過濾器將處理任何附件,而不僅僅是具有指定文件擴展名的附件。 –

相關問題