2013-05-09 92 views
2

我想讓我的Android應用程序以各種方式(郵件,藍牙,無論)從一個設備發送文件到另一個設備。郵件附件沒有正確的內容類型

我的第一個用例是電子郵件。這是我用來生成我的SEND意圖的代碼。

  Intent shareIntent = new Intent(); 
      shareIntent.setAction(Intent.ACTION_SEND); 
      shareIntent.setType("text/xml"); 
      shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 
      startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.share_list))); 

當我在模擬器(Android 2.1系統)運行此,所產生的郵件的附件部分寫着:

Content-Type: ; 

然而,當我在我的Galaxy Nexus(安卓4.2.2運行此),所述附接部分讀取:

Content-Type: application/tpl; 

這可能是因爲所傳遞的URI在.tpl結束。

這是我本來期望:

Content-Type: text/xml; 

我失去了一些東西在這裏?郵件附件具有正確的MIME類型是非常重要的,所以我可以在應用程序的接收端使用意圖過濾器。

+0

您是否嘗試使用電子郵件應用程序附加其中一個文件並查看附件部分讀取的內容?我想你會得到同樣的結果。 – 2013-05-14 18:08:10

+0

這也取決於電子郵件客戶端。正如@ Marina.Eariel所述,嘗試直接從各種電子郵件客戶端附加文件,您可能會對結果感到驚訝。處理這種情況的一種方法是爲您的應用程序提供一個自定義文件擴展名,並使您的意圖過濾器用於辨別應該處理的文件。 – adrianp 2013-05-15 09:00:06

+0

此附件在設備中不工作,因爲模擬器中沒有電子郵件app.try這在設備中。 – 2013-05-16 04:58:46

回答

0

我想你指的Web內容類型,

你應該有這種類型的,你的情況(電子郵件/消息)i.setType("message/rfc822");

看到這個post

我希望這會做..

0

爲什麼應用程序此代碼工作...因爲什麼應用程序需要比數據更少的細節..所以繼承人的交易

       Intent waIntent = new Intent(Intent.ACTION_SEND); 

           waIntent.setType("text/plain"); 
           waIntent.setPackage("com.whatsapp"); 
           waIntent.setType("image/*"); 
           waIntent.putExtra(Intent.EXTRA_TEXT, INFO); 
           waIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(file_PATH))); 


           startActivity(Intent.createChooser(waIntent, "Share with Whatsapp")); 

       for other such as gmail or any mail - just remove the package and set type whatever you like an iamge or file or anything that it supports,for bluetooth it works too...and for whats app i shared the code with you. 

希望這一切可以幫助你

0

我有幾個建議。

  1. 使用setData而不是putExtra。或者你已經在使用setData來做其他事情了?無論如何,在設置數據之後設置MIME類型。來自setdata的文檔:「設置這個intent操作的數據,這個方法自動清除以前由setType(String)或setTypeAndNormalize(String)設置的任何類型。」 http://developer.android.com/reference/android/content/Intent.html#setData(android.net.Uri)

  2. 使用setType 之後您使用putExtra。這可能是因爲當你使用putExtra時,從數據中(錯誤地)推斷出mime類型,覆蓋你剛剛設置的mime類型。

  3. 使用setDataAndType(Uri數據,字符串類型)。文檔說你應該很少使用它,因爲應該從數據中推斷出mime類型,但是如果這對你不起作用,你仍然可以試試這個。從文檔:「這個方法應該很少被使用 - 它允許你重寫通常從你自己的類型在這裏給出的數據推斷的MIME類型。「http://developer.android.com/reference/android/content/Intent.html#setDataAndType(android.net.Uri,%20java.lang.String)

編輯:以上 的建議是設置正確的內容類型,而不是隻得到電子郵件應用程序中的應用程序選擇對話框顯示了有Android中沒有正確的方式來獲得唯一的電子郵件應用程序。應用程序選擇器對話框您的應用程序只能指定要發送的內容類型,其他應用程序可以指定它們是否可以發送您的內容類型,例如可以是電子郵件應用程序,也可以是「應用程序」。爲什麼要限制用戶只能將文件發送到電子郵件應用程序的能力? 如果您希望將文件發送到特定的電子郵件地址,那就不同了,那麼您應該在意圖上設置收件人的電子郵件地址;然後只會顯示電子郵件應用程序在應用選擇器對話框中。

相關問題