2015-05-12 249 views
0

我正在創建一個應用程序,但我有問題。在我將一些數據插入名爲「message.txt」的文件後,我無法通過電子郵件發送此文件,因爲我的智能手機說「不可能發送附件」。我該如何解決這個問題?Java:發送電子郵件附件:無法發送附件

這是代碼:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    String address = ... 
    byte[] messagetosend = ... 
    String filename = "message.txt"; 
    File file = new File(getExternalFilesDir(null), filename); 
    FileOutputStream outputstream; 
    try { 
     outputstream = openFileOutput(filename,MODE_WORLD_READABLE); 
     outputstream.write(messagetosend); 
     outputstream.flush(); 
     outputstream.getFD().sync(); 
     outputstream.close(); 
    } catch (Exception e1) { 
     e1.printStackTrace(); 
    } 
    Intent sendIntent = new Intent(); 
    sendIntent.setAction(Intent.ACTION_SEND); 
    sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{address}); 
    sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); 
    sendIntent.setType("*/*"); 
    startActivity(Intent.createChooser(sendIntent,"Send with...")); 
    } 
+0

是文件名,路徑correct.You有權限讀取文件? – xyz

+0

我怎樣才能讓文件讀取? –

回答

0

第三方應用程序沒有權限訪問該文件。使用FileProvider來提供它,或將文件複製到external storage而不是internal storage

+0

嘗試http://www.droidviews.com/how-to-setfix-file-permissions-on-android-devices-a-beginners-guide/將有所幫助?從來沒有做過.. – xyz

+0

@xyz:該博客文章有與應用程序開發無關。 – CommonsWare

+0

我嘗試將文件寫入外部存儲和Gmail(例如)識別附件,但是當我單擊按鈕以發送電子郵件時,通知欄上會顯示一條通知,指出「無法發送附件」。你知道爲什麼嗎? –

0

如果您已將該文件保存爲應用程序的私密文件,則該應用程序可以查看該應用程序是否正常,但外部電子郵件客戶端將無法看到該文件。 您需要將其寫出到外部存儲,或公開。 visit this linkvisit this您將瞭解訪問級別。

或嘗試用JavaMail here is solved發送電子郵件,here is too

+0

我嘗試將文件寫入外部存儲和Gmail(例如)識別附件,但是當我單擊按鈕發送電子郵件時,通知欄上會顯示一條通知,指出「不可能發送附件」。你知道爲什麼嗎? –

+0

你是否真的需要使用intent來完成這種類型的工作?如果你想通過Gmail發送附件,只需使用java lib發送電子郵件。 – Sajidkhan

+0

我想通過gmail或任何其他郵件發送應用程序發送附件。我知道只有這樣做才能做到這一點。你可以鏈接我的Java庫嗎? –