Android操作“发送彩信意图失败,原因是”;无法连接。“不支持文件”;

Android操作“发送彩信意图失败,原因是”;无法连接。“不支持文件”;,android,android-mms,Android,Android Mms,在我的应用程序中,用户从图库中选择一张照片。它被保存,uri被传递给上述两个方法之一。sendPhotoByEmail方法格式化包含照片的电子邮件。sendPhotoByText方法格式化文本消息。照片没有出现在其中,我看到错误消息“无法附加。文件不受支持”。我在每个函数中使用相同的照片(相同的uri)进行了测试。uri为“content://media/external/images/media/1017". 我还单独运行了Messenger,并成功地附加了同一张照片 我已经在我的设备上设置了

在我的应用程序中,用户从图库中选择一张照片。它被保存,uri被传递给上述两个方法之一。sendPhotoByEmail方法格式化包含照片的电子邮件。sendPhotoByText方法格式化文本消息。照片没有出现在其中,我看到错误消息“无法附加。文件不受支持”。我在每个函数中使用相同的照片(相同的uri)进行了测试。uri为“content://media/external/images/media/1017". 我还单独运行了Messenger,并成功地附加了同一张照片

我已经在我的设备上设置了应用程序中的SMS和存储权限,这些是AndroidManifest.xml中的权限:

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


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

根据您的上述评论,您似乎只希望与短信/彩信应用程序共享您的意图。您是否尝试过使用
intent.setType(“vnd.android dir/mms sms”)
设置意向类型?

基于您的上述评论,您似乎只希望与sms/mms应用程序共享您的意向。您是否尝试过使用
intent.setType(“vnd.android dir/mms sms”)
设置intent类型?

不确定问题出在哪里,但只是提醒一下您不需要sms权限即可使用intent“照片未显示在其中,我看到错误消息”无法附加。不支持文件“”--将
Intent.FLAG\u GRANT\u READ\u URI\u权限
添加到
Intent
,以及您希望的任何其他标志。如果没有这一点,另一个应用程序将无权阅读您的
Uri
标识的内容。如果您阅读我的评论,您将看到我解决了“无照片”问题,而现在我的问题是,当显示一组应用程序供用户选择时,会显示几个不是sms/mms应用程序的应用程序。我只希望在该面板中显示sms/mms应用程序不确定问题是什么,但只是提醒您不需要sms权限即可使用“照片未显示在其中,我看到错误消息”无法附加。不支持文件“”--将
Intent.FLAG\u GRANT\u READ\u URI\u权限
添加到
Intent
,以及您希望的任何其他标志。如果没有这一点,另一个应用程序将无权阅读您的
Uri
标识的内容。如果您阅读我的评论,您将看到我解决了“无照片”问题,而现在我的问题是,当显示一组应用程序供用户选择时,会显示几个不是sms/mms应用程序的应用程序。我只希望在该面板中显示sms/mms应用程序,但不幸的是,这不起作用。事实上,它与我想要的正好相反——它显示了我可能想要使用的所有应用程序,除了SMS/MMS应用程序。不幸的是,这不起作用。事实上,它与我想要的正好相反——它显示了我可能想要使用的所有应用程序,除了SMS/MMS应用程序。
    <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);