You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓应用MMS仅完成准备未发送问题求助

解决Android MMS仅能准备无法发送的问题

看起来你遇到的问题很典型——SMS能正常发送,但MMS卡在准备阶段完成不了发送。我帮你梳理几个关键的排查点和修复方案:

1. 缺失MMS核心权限

你的Manifest里只申请了SEND_SMS,但发送MMS需要单独的**SEND_MMS权限**,这是最容易忽略的点。赶紧把这个权限添加到Manifest中:

<uses-permission android:name="android.permission.SEND_MMS" />

另外注意:从Android 6.0(API 23)开始,这类权限属于危险权限,不能只靠Manifest声明,必须在调用发送函数前做动态权限申请,否则系统会直接拦截操作。

2. Intent配置错误导致发送流程中断

你当前使用的Intent.ACTION_SEND虽然能唤起彩信编辑界面,但系统可能无法正确识别为MMS发送请求,进而无法触发发送动作。建议做以下调整:

  • 改用Intent.ACTION_SENDTO并指定smsto:的Uri,明确告诉系统这是彩信发送请求
  • 将Intent的Type设置为"vnd.android-dir/mms-sms",这是MMS的标准MIME类型
  • 移除重复传入的attachedFileUri参数(你同时在Intent构造和EXTRA_STREAM里传了,可能造成参数冲突)

3. Android 7.0+的FileUriExposedException问题

从Android 7.0(API 24)开始,直接用Uri.fromFile()访问外部存储文件会触发安全异常,系统会阻止附件加载,这也是MMS无法发送的常见原因。你需要用FileProvider生成安全的Content Uri。

修改后的完整代码示例

第一步:在Manifest中注册FileProvider

<application>
    ...
    <provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>
</application>

第二步:创建FileProvider路径配置文件

在res/xml目录下新建file_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

第三步:修改sendMMS函数

public void sendMMS(String sendTO, String msg) {
    String filePath = "/storage/emulated/0/Download/alphatest.png";
    File attachedFile = new File(filePath);
    
    // 先检查并申请必要权限
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_MMS) != PackageManager.PERMISSION_GRANTED ||
        ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, 
            new String[]{Manifest.permission.SEND_MMS, Manifest.permission.READ_EXTERNAL_STORAGE}, 
            1001);
        return;
    }

    Uri attachedFileUri;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        // Android 7.0+用FileProvider生成安全Uri
        attachedFileUri = FileProvider.getUriForFile(this, 
            getPackageName() + ".fileprovider", 
            attachedFile);
    } else {
        // 低版本直接使用文件Uri
        attachedFileUri = Uri.fromFile(attachedFile);
    }

    // 构造正确的MMS发送Intent
    Intent mmsIntent = new Intent(Intent.ACTION_SENDTO);
    mmsIntent.setData(Uri.parse("smsto:" + sendTO)); // 指定收件人
    mmsIntent.setType("vnd.android-dir/mms-sms");
    mmsIntent.putExtra(Intent.EXTRA_STREAM, attachedFileUri);
    mmsIntent.putExtra("sms_body", msg);
    // 授予彩信应用临时读取文件的权限
    mmsIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

    try {
        startActivity(mmsIntent);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(this, "未找到可用的彩信应用", Toast.LENGTH_SHORT).show();
    }
}

额外测试建议

  • 先测试不带附件的纯文本MMS,确认发送流程正常后再添加附件
  • 检查设备的移动数据是否开启(MMS依赖移动网络,Wi-Fi环境下可能无法发送)
  • 确认收件人号码格式正确(避免多余的空格、括号等符号)

内容的提问来源于stack exchange,提问作者bbbaws

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:37:40