Android ACTiON_SEND не удается отправить MMS с сообщением «Невозможно прикрепить. Файл не поддерживается» - PullRequest
1 голос
/ 05 октября 2019
private void sendPhotoByEmail(Uri photoUri, String[] emailTo) {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        intent.setType("message/rfc822");
        intent.putExtra(android.content.Intent.EXTRA_EMAIL, emailTo);
        String intro;
        if (mData != null) {
            intro = mData.optString(DecisionTree.EMAIL_BODY, getString(R.string.share_photo_email_body_format));
        } else {
            intro = getString(R.string.share_photo_email_body_format);
        }
        intro = String.format("%s\n\n%s", intro, getString(R.string.share_photo_email_body_footer,
                                                           ApplicationContext.getFormattedVersionInfo(this)));
        String locationText = intro + ApplicationContext.getUserLocationBody();
        intent.putExtra(android.content.Intent.EXTRA_SUBJECT, getString(R.string.share_photo_subject));
        intent.putExtra(android.content.Intent.EXTRA_TEXT, locationText);
        intent.putExtra(Intent.EXTRA_STREAM, photoUri);
        startActivity(intent);
    }

    private void sendPhotoByText(Uri photoUri, String phoneTo) {
        Toast.makeText(this, "In sendPhotoByText", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        intent.setType("image/*");
        intent.setData(Uri.parse("smsto:" + phoneTo));
        String intro;
        if (mData != null) {
            intro = mData.optString(DecisionTree.EMAIL_BODY, getString(R.string.share_photo_email_body_format));
        } else {
            intro = getString(R.string.share_photo_email_body_format);
        }
        intro = String.format("%s\n\n%s", intro, getString(R.string.share_photo_email_body_footer,
                                                           ApplicationContext.getFormattedVersionInfo(this)));
        String locationText = intro + ApplicationContext.getUserLocationBody();
        intent.putExtra("sms_body", locationText);
        intent.putExtra(Intent.EXTRA_STREAM, photoUri);
        startActivity(intent);
    }

В моем приложении пользователь выбирает фотографию из Галереи. Это сохраняется, и URI передается одному из двух методов выше. Метод sendPhotoByEmail форматирует электронное письмо с фотографией. Метод sendPhotoByText форматирует текстовое сообщение. Фотография не появляется в нем, и я вижу сообщение об ошибке «Невозможно прикрепить. Файл не поддерживается». Я проверил с той же фотографией (той же URI) в каждой функции. URI является "content: // media / external / images / media / 1017". Я также запустил Messenger отдельно и смог успешно прикрепить одну и ту же фотографию.

Я установил разрешения для SMS и хранения в приложении на своем устройстве, и это разрешения в AndroidManifest.xml:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.SEND_SMS />

Любые идеи будут высоко оценены.

Верьте или нет, я заменил

        intent.setData(Uri.parse("smsto:" + phoneTo));

на

        intent.putExtra("address", phoneTo);

, и фотография появилась вформатированное текстовое сообщение. Тем не менее, на экране, который показывает приложения для выбора (который ранее отображал только приложения для обмена текстовыми сообщениями), теперь отображаются и другие приложения. Мне бы хотелось, чтобы показывались только приложения для обмена текстовыми сообщениями.

1 Ответ

0 голосов
/ 18 октября 2019

Судя по вашим комментариям, приведенным выше, кажется, что вы хотите, чтобы ваши намерения были доступны только для приложений SMS / MMSВы пытались установить тип намерения с помощью intent.setType("vnd.android-dir/mms-sms")?

...