我使用以下代码发送短信:
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。发送短信时可以添加什么以确保收件人设置在短信应用程序中?
答案 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);
它似乎适用于我可以测试的不同设备。我希望这对任何遇到同样问题的人都有帮助。
干杯!