2012-09-17 65 views
5

我有一個生成自定義文件類型的應用程序(.SOR)。在應用程序內部,我有一個功能可以發送附有這些文件之一的電子郵件。我還有一個意圖過濾器,允許應用顯示在可打開此類文件的應用列表中。這使我可以(有時)通過手機上的用戶電子郵件客戶端使用應用程序打開文件。安卓:註冊意圖過濾器打開電子郵件附件與我的應用程序

然而,當電子郵件來自電腦的電子郵件客戶端,並且當從手機收到的電子郵件將無法正常工作這僅適用。例如,如果我生成這些.sor文件中的一個,然後使用我的應用程序向我自己的電子郵件帳戶發送電子郵件,我將在手機上收到電子郵件,但無法使用我的應用程序打開附件... BUT如果我發送電子郵件到同一個帳戶,並打開它,而不是我的電腦(雷鳥)在手機上,然後要麼轉發或者把它作爲一個新的電子郵件到我的手機,我將能夠使用相同的電子郵件應用程序在手機上打開附件與我的應用程序...我只在這裏談論一個電子郵件帳戶,唯一的區別是電子郵件從哪裏發送,我的手機或我的Windows 7 PC。

我能想到的唯一的事情是,當我從手機發送電子郵件時,將不同的MIME類型嵌入到附件中,而不是從我的PC上的Thunderbird發送它時......我指定MIME類型作爲「應用程序/八位字節流」,當我從我的應用程序發出電子郵件,我有一個意圖過濾器,尋找這種MIME類型...但它不能正常工作。

我的意圖過濾器:

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="application/octet-stream" /> 
    <data android:scheme="file" /> 
</intent-filter> 

,我從電話中的電子郵件附件發送文件時傳遞給手機電子郵件客戶端的意圖:

Intent sendIntent = new Intent(Intent.ACTION_SEND); 
sendIntent.setType("application/octet-stream"); 
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + fullPathString)); 
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "FiberDroid OTDR Trace File: \"" + ContextMenuFileName + "\""); 
sendIntent.putExtra(Intent.EXTRA_TEXT, "This e-mail was sent from the TTI FiberDroid Android application."); 
startActivity(Intent.createChooser(sendIntent, "Select E-Mail Application")); 

同樣,在發送附帶文件的電子郵件正常工作......如果我從PC郵件客戶端發送電子郵件相同的文件回電話(如Outlook或Thunderbird),那麼我可以直接從手機電子郵件應用程序中打開該文件與我的應用程序。問題是,如果我打開電話上的電子郵件而沒有通過我的電腦作爲中間人,我無法打開附件,我給出的唯一選擇是「保存到SD卡」...

因此回顧一下,我有我的手機上2個電子郵件,是相同的,附有相同的文件和雙方最初是從我的應用程序相同的帳戶(無論是從同一個賬戶也收到了)發送,但通過我的電腦去作爲一個附件不必要的中間人工作正常,並且直接從我的手機發送和接收的不是。

任何想法?先謝謝你。

+0

如果它似乎我解釋這個反覆,它是我寫這聽起來令人困惑的我,所以我知道對不起會令人困惑的閱讀... – CHollman82

回答

8

我已經解決了這一點,主要是通過在黑暗中,沒有真正瞭解拍攝爲什麼我沒有解決它,但這裏是我有我的清單中的意圖過濾器現在,這裏的「.SOR」是擴展我的自定義文件類型。這適用於我已經嘗試了所有的電子郵件和文件管理應用程序,包括K-9郵件和天文:

<!-- For email attachments --> 
<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="application/*" host="*" android:pathPattern=".*.sor" android:scheme="content" /> 
</intent-filter> 

<!-- For file browsers --> 
<intent-filter> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <data android:mimeType="application/*" host="*" android:pathPattern=".*.sor" android:scheme="file" /> 
</intent-filter> 
+0

是你的代碼與GMAIL一起工作嗎? – Giuseppe

+1

我對您的「For Email附件」解決方案有問題。它可以工作,但也會產生問題,如果有新的gmail通知被點擊,它會詢問我是否要在我的應用程序中打開。如果我說是,它會崩潰。 有沒有人有這個解決方案? – BriCo84

+2

我得到了答案,這要歸功於我上面從其他用戶的自己的評論。@richardleggett 將MIME類型設置爲應用程序/ *意味着用戶將得到一個選擇器,要求在Gmail /電子郵件和您的應用程序中打開所有新的電子郵件通知。取而代之的是使用: BriCo84

相關問題