使用Intent发送SMS不会在某些设备上添加收件人

时间:2011-08-30 11:05:13

标签: android sms android-intent receiver

我使用以下代码发送短信:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("smsto:" + phoneNumber));
        intent.putExtra("address", phoneNumber);
        intent.putExtra("sms_body", messageBody);
        intent.setType("vnd.android-dir/mms-sms");
        context.startActivity(intent);

我添加了两个带有smsto的Uri:并将Intent地址添加到Intent。它适用于大多数设备,但在某些设备上 - 它并不适用。其中一个设备是SE XPERIA Mini。发送短信时可以添加什么以确保收件人设置在短信应用程序中?

1 个答案:

答案 0 :(得分:21)

我查看了Intent源代码,似乎设置意图类型会删除数据,设置数据会删除类型。这就是我发现的:

public Intent setData(Uri data) {
        mData = data;
        mType = null;
        return this;
    }

public Intent setType(String type) {
        mData = null;
        mType = type;
        return this;
    }

public Intent setDataAndType(Uri data, String type) {
        mData = data;
        mType = type;
        return this;
    }

因此设置类型会覆盖Uri.parse中提供的数据(“smsto:”+ phoneNumber)。我也试过使用setDataAndType,但是然后android就找不到合适的Intent来启动这样的组合......所以这是最终的解决方案:

Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.putExtra("address", phoneNumber);
        intent.putExtra("sms_body", messageBody);
        intent.setData(Uri.parse("smsto:" + phoneNumber));
        context.startActivity(intent);

它似乎适用于我可以测试的不同设备。我希望这对任何遇到同样问题的人都有帮助。

干杯!