Выбор из таблицы усекает его

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

0
задан idwes7 30 December 2018 в 18:40
поделиться