Я использовал что-то в соответствии с принятым в настоящее время ответом, чтобы отправлять электронные письма с прикрепленным двоичным файлом журнала ошибок. 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
(только для почтовых приложений) и создает выбор на основе этого списка действий и оригинального намерения ACTION_SEND с правильным типом mime.
Еще одно преимущество заключается в том, что Skype больше не указан ( который реагирует на тип mime rfc822).