2012-09-21 88 views
8

這與問題how to open an attachment with my applicacion from within the email app? (mime type, intent filter ...)有關,我認爲我已經解決了它,但事實並非如此。在android中註冊新的mime類型

我發現有些電子郵件客戶端(例如內置於電子郵件客戶端的Samsung Galaxy SII)不遵守sendIntent.setType()方法,並且在將附件添加到電子郵件時,它不會添加指定的MIME類型在setType方法中。其結果是,當電子郵件到達時我無法打開附件。

因此,爲了能夠從任何電子郵件客戶端打開附件,我認爲他們唯一的辦法就是創建一個與我的自定義擴展關聯的新MIME類型。

但我找不到任何方法來註冊一個新的MIME類型。我知道這可以通過一些應用程序來完成(ASTRO文件資源管理器),但我不知道在哪裏可以查找有關添加新的MIME類型的信息。

編輯(2012年10月1日) ASTRO文件資源管理器僅爲其進程添加MIME類型。它們不能在其流程之外被讀取,所以我沒有任何例子說明它的工作原理。

我一直在看MimeTypeMap源代碼,看起來它只使用一組預定義的MIME類型,你不能添加一個新的。

我嘗試使用反射(只是爲了檢查),並能夠添加一個MIME類型,但它只對我的進程可見,就好像我的進程有它自己的MimeTypeMap副本,所以電子郵件客戶端仍然不會打開附件。

有人可以幫忙嗎?

在此先感謝

+0

我不認爲這是可能的。我試圖找回一些時間並放棄。這對我來說不是必要的。 – Ifor

回答

1

這是我的理解是你的數據規格的基礎上單獨的文件擴展名.xyz。所以當你在你的意圖過濾器中聲明它時,你需要確保你對除patternPath以外的所有參數儘可能通用。

嘗試分裂它分爲幾個<data>標籤,並確保它的不可知朝mimeType

<data android:scheme="file" />        
    <data android:mimeType="*/*" /> 
    <data android:pathPattern=".*\\.xyz" /> 
    <data android:host="*" /> 

又見the documentation on <data>,以確保所有亞型匹配。

我的理解是,文件的底層數據結構可能會在某些設備上導致問題。假設你的.xyz文件類型是XML;電子郵件客戶端可能會認爲提供text/xml MIME類型比您聲明的更具體,並調用它。

在這種情況下,解決方案可能是聲明多個意向過濾器,一次也包括<data android:mimeType="text/xml" />。 (這或多或少與this answer暗示的一致。)

+0

我已經嘗試過了,它也不適用於某些電子郵件客戶端(SGII) – richardtz