我想創建一個選項,讓用戶通過電子郵件從我的應用程序發送文件。該文件在應用程序內部,可通過FileProvider訪問。Android共享意向選擇器僅限EMail客戶端
這是contentURI看起來像content://packagename.files/files/somefile.ext
在這裏,你可以看到,我給用戶共享文件PicsArt不僅,谷歌驅動器,OneDrive和電子郵件。
我能夠將內容分享成功的前三個客戶,因爲他們非常特殊的應用。但是當談到電子郵件時,我需要用戶從他的手機中安裝的應用程序中選擇客戶端。
這裏有2組代碼,我已經創建了:
代碼選項1:
Intent EMail = ShareCompat.IntentBuilder.from(this)
.setType("message/rfc822")
.setSubject("Emailing: File Attached")
.setText("Hello")
.setStream(contentUri)
.setChooserTitle("Send via EMail").getIntent();
startActivity(Intent.createChooser(EMail, "Send via EMail"));
上面的代碼顯示我在哪裏有,它可以處理文件,如圖在許多應用中選擇器下面的圖片。如果我選擇的任何電子郵件客戶端應用程序或任何其他應用程序
這一個工作正常。
但這樣做的問題是,有供用戶選擇任何應用程序,這是不是應用的期望行爲的選項。所以,我修改了代碼如下:
final Intent _Intent = new Intent(Intent.ACTION_SENDTO);
_Intent.setType("text/html");
_Intent.setData(Uri.parse("mailto:"));
_Intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
_Intent.putExtra(Intent.EXTRA_STREAM, contentUri);
_Intent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"Emailing: File Attached");
_Intent.putExtra(android.content.Intent.EXTRA_TEXT,
"Hello");
startActivity(Intent.createChooser(_Intent, "Send via EMail"));
這裏是代碼的結果:
但是,現在這裏的問題是,我無法從發送的文件內容提供者(FileProvider)。電子郵件客戶端顯示了消息,如下選擇之後:
它根本就沒有文件的電子郵件附連在任何客戶端在上述列表中。
如果有人能幫助我,我會很棒。我認爲,我已經嘗試過所有可能的場景,通過改變MIME類型,以不同方式設置數據設置流等內容,但無法獲得預期結果。
請讓我知道,以防您需要任何其他細節。
再次提前致謝。
您需要編寫ContentProvider,它將向您向其傳遞ContentUri的客戶端提供InputStream。 –
@zeus你能爲我寫一行或兩行代碼嗎?我在這方面有點不成熟。 –
我不確定如果這可以幫助你,但看看這個http://stackoverflow.com/a/31470694/3209739。文件:/ /困擾了我,沒有它的工作,但它是一個文件不是從內容提供商。您可以嘗試沒有內容:/。這是我的盲目猜測;;) – cgr