gpt4 book ai didi

android - 在某些设备上使用 SENDTO 发送带附件的电子邮件不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:52:42 30 4
gpt4 key购买 nike

起初您会想“等等,这个问题是重复的!”。继续阅读。

我正在尝试使用 Intent ACTION_SENDTO(将电子邮件 URI 作为数据)以便让电子邮件应用程序响应只是

(使用 ACTION_SEND 启动标准的“SEND”选择器,没有数据 URI,这意味着非电子邮件应用程序(例如 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

Nexus 提供:

04-11 11:38:59.249: E/Feedback(12702): File path: /storage/emulated/0/logs.zip

(两者都基于 getExternalStorageDirectory() 以确保跨应用程序访问)。

有人知道为什么不一样吗?

最佳答案

我想到的唯一解决方案是以下一个。它是我在寻找完整答案时发现的其他一些内容的混合体。以下将仅显示电子邮件应用程序并允许包含附件。最重要的部分在这里找到:https://stackoverflow.com/a/8550043/4927659

ArrayList<Uri> uris = new ArrayList<>();
uris.add(Uri.parse("file://" + filepath));
//filepath is something like that: /mnt/sdcard/DCIM/DSC0001.JPG
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto", "example@gmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Mail subject");
List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(emailIntent, 0);
List<LabeledIntent> intents = new ArrayList<>();
for (ResolveInfo info : resolveInfos) {
Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.setComponent(new ComponentName(info.activityInfo.packageName, info.activityInfo.name));
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"example@gmail.com"});
intent.putExtra(Intent.EXTRA_SUBJECT, "Mail subject");
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); //ArrayList<Uri> of attachment Uri's
intents.add(new LabeledIntent(intent, info.activityInfo.packageName, info.loadLabel(getPackageManager()), info.icon));
}
Intent chooser = Intent.createChooser(intents.remove(intents.size() - 1), "Send email with attachments...");
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents.toArray(new LabeledIntent[intents.size()]));
startActivity(chooser);

关于android - 在某些设备上使用 SENDTO 发送带附件的电子邮件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15946297/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com