Android ACTiON_SEND MMS Intent 失败,返回 "Unable to attach. File not supported"

标签 android android-mms

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);

照片出现在格式化的短信中。然而,显示可供选择的应用程序的屏幕(以前只显示短信应用程序)现在也显示其他应用程序。我希望它只显示短信应用程序。

最佳答案

根据您上面的评论,您似乎只想与 SMS/MMS 应用共享您的 Intent 。您是否尝试过使用 intent.setType("vnd.android-dir/mms-sms") 设置 Intent 类型?

关于Android ACTiON_SEND MMS Intent 失败,返回 "Unable to attach. File not supported",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58244632/

相关文章:

android - 如何在 PopupWindow 中为 EditText 启用选择标记?

android - logcat 过滤器应用在哪里?

java - 如果获得 "[]",如何消除关于改造响应的进度对话框

java - 在android中发送带有图像、文本和电话号码的彩信

android - 我可以在 Android KitKat 中阅读 MMS-s 而不是默认的消息传递应用程序吗?

java - 如何在 Android 上获取表列数组列表?

android - 如何从 Xamarin Android 应用程序调用 MVC 网络 Controller

android - 如何从内容 ://mms. 中检索彩信的日期

android - Android 中的彩信无法使用 Intent.ACTION_SEND