最初は「待って、この質問は重複している!」と思うでしょう。読む。
メールアプリだけACTION_SENDTO
が応答するようにするために、(データとしてメール URI を使用して)インテントを使用しようとしています。
(を使用ACTION_SEND
すると、データ URI のない標準の「SEND」セレクターが起動します。これは、Google ドライブなどの非メール アプリも応答することを意味します)。
私の問題は、添付ファイルACTION_SEND
がすべてのデバイスで機能することですが、ACTION_SENDTO
一部のデバイスのみを使用すると、ファイルが正しく添付されます。Nexus 7 は動作しますが、Samsung Galaxy Tab と Acer Iconiaは動作しません。
以下に、さまざまな方法を並べて示します。
String email = getActivity().getResources().getString(R.string.supportEmail);
String subject = getActivity().getResources().getString(R.string.sFeedback);
subject = String.format(subject,
getActivity().getResources().getString(R.string.productName));
String content = getActivity().getResources().getString(R.string.whatFeedbackWouldYouLikeToProvide) + "\n\n" +
mMessage.getText().toString();
File toSend = new File(outfile);
if(toSend.exists()) {
Log.e("Feedback", "File path: " + toSend.getAbsolutePath());
Intent emailIntent = new Intent(android.content.Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:" +email));
emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, Uri.fromFile(toSend));
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, content);
/* Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("message/rfc822");
emailIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{email});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT , content);
emailIntent.putExtra(Intent.EXTRA_STREAM , Uri.fromFile(toSend)); */
try {
startActivity(emailIntent);
} catch (ActivityNotFoundException anfe) {
Toast.makeText(getActivity(), getResources().getString(R.string.pleaseInstallAnEmailClientInOrderToSendUsFeedback), 8000).show();
}
}
ファイルパスが問題ではないように見えることがわかります。レポートするログに追加しました。
サムスンが提供するもの:
04-11 11:40:09.953: E/Feedback(6286): File path: /storage/sdcard0/logs.zip
ネクサスが与えるもの:
04-11 11:38:59.249: E/Feedback(12702): File path: /storage/emulated/0/logs.zip
getExternalStorageDirectory()
(両方ともアプリケーション間のアクセスを確保することに基づいています)。
違いの理由を知っている人はいますか?