2016-10-06 6 views
2

キャッシュディレクトリに、他のユーザーと共有したいファイルをGmail/WhatsAppなどで作成しています。私はFileProviderを使ってこれを行うことができ、WhatsAppではうまくいきます。 Gmailの共有を選択すると、写真は正しく添付されますが、Intent.EXTRA_STREAM経由で渡されたUriも、新しく作成されたメールの「To:」フィールドのアドレスとしてGmailによって解析され、アドレス私はIntent.EXTRA_EMAIL経由で渡します。EXTRA_STREAMに渡されるコンテンツURIが「To:」メールフィールドに表示される

したがって、ユーザーは送信前に偽の(Uri)電子メールアドレスを削除する必要があります。これを防ぐ方法はありますか?

Uri contentUri = FileProvider.getUriForFile(getActivity(), "com.mypackage.fileprovider", cacheFile); 

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setDataAndType(contentUri, "image/jpeg"); 
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); 
intent.putExtra(Intent.EXTRA_SUBJECT, "Photo"); 
intent.putExtra(Intent.EXTRA_TEXT, "Check out this photo"); 
intent.putExtra(Intent.EXTRA_STREAM, contentUri); 

if(intent.resolveActivity(getActivity().getPackageManager()) != null) 
{ 
    startActivity(Intent.createChooser(intent, getString(R.string.share_file))); 
} 

答えて

3

置き換えますと

intent.setDataAndType(contentUri, "image/jpeg"); 

intent.setType("image/jpeg"); 

をあなたの問題はEXTRA_STREAMではなく、むしろ、あなたはIntentのデータ面でUriを入れていること。あなたのminSdkVersionが21未満であれば

また、あなたがIntentフラグは自動的にAndroidの以前のバージョンにEXTRA_STREAMに適用されていないとして、some extra steps to ensure that clients can read the contentを取る必要があります。

+0

ありがとう、それはそれを修正しました。あなたの答えのスピードを尊重します。何も役に立たない解決策を探すために数時間を費やしました。私ができるのならば、あなたに投票します.... –

関連する問題