Я использовал что-то вроде принятого в настоящее время ответа, чтобы отправлять электронные письма с приложенным двоичным файлом журнала ошибок.GMail и K-9 отправляют его очень хорошо, и он также приходит на мой почтовый сервер.Единственной проблемой был мой почтовый клиент по выбору Thunderbird, у которого были проблемы с открытием / сохранением прикрепленного файла журнала.На самом деле он просто не сохранил файл без жалоб.
Я взглянул на один из исходных кодов этих писем и заметил, что вложение файла журнала (понятно) имеет тип mime message/rfc822
.Конечно, это вложение не является прикрепленным письмом.Но Thunderbird не может изящно справиться с этой крошечной ошибкой.Так что это было своего рода облом.
После небольшого количества исследований и экспериментов я нашел следующее решение:
public Intent createEmailOnlyChooserIntent(Intent source,
CharSequence chooserTitle) {
Stack<Intent> intents = new Stack<Intent>();
Intent i = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto",
"info@domain.com", null));
List<ResolveInfo> activities = getPackageManager()
.queryIntentActivities(i, 0);
for(ResolveInfo ri : activities) {
Intent target = new Intent(source);
target.setPackage(ri.activityInfo.packageName);
intents.add(target);
}
if(!intents.isEmpty()) {
Intent chooserIntent = Intent.createChooser(intents.remove(0),
chooserTitle);
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
intents.toArray(new Parcelable[intents.size()]));
return chooserIntent;
} else {
return Intent.createChooser(source, chooserTitle);
}
}
Его можно использовать следующим образом:
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("*/*");
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(crashLogFile));
i.putExtra(Intent.EXTRA_EMAIL, new String[] {
ANDROID_SUPPORT_EMAIL
});
i.putExtra(Intent.EXTRA_SUBJECT, "Crash report");
i.putExtra(Intent.EXTRA_TEXT, "Some crash report details");
startActivity(createEmailOnlyChooserIntent(i, "Send via email"));
Как вы можете видеть, метод createEmailOnlyChooserIntent можно легко передать с правильным намерением и правильным типом mime.
Затем он проходит через список доступных действий, которые отвечают протоколу ACTION_SENDTO mailto
intent (которые являются только приложениями электронной почты) и создает средство выбора на основе этого списка действий и исходного намерения ACTION_SEND с правильным типом MIME.
Другое преимущество заключается в том, что Skype больше не отображается в списке (что происходит в ответ натип mime rfc822).