4

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

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

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

4

1 回答 1

21

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

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

它似乎适用于我可以测试的不同设备。我希望这对面临同样问题的人有所帮助。

干杯!

于 2011-08-30T11:43:34.510 回答