如需发起短信或彩信,请使用以下其中一个 Intent 操作,并使用下列 extra 键指定电话号码、主题和消息正文等消息详情。
-
操作
-
ACTION_SENDTO
或
ACTION_SEND
或
ACTION_SEND_MULTIPLE
数据 URI 架构
-
sms:<phone_number>
smsto:<phone_number>
mms:<phone_number>
mmsto:<phone_number>
以上每一个架构的处理方式都相同。
MIME 类型
-
"text/plain"
"image/*"
"video/*"
Extra
-
- 表示消息主题的字符串(通常只适用于彩信)。
- 表示消息正文的字符串。
-
指向要附加的图像或视频的
Uri
。 如果使用的是ACTION_SEND_MULTIPLE
操作,此 extra 应为指向要附加的图像/视频的Uri
ArrayList
。
"subject"
"sms_body"
EXTRA_STREAM
示例 Intent:
public void composeMmsMessage(String message, Uri attachment) {
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType(HTTP.PLAIN_TEXT_TYPE);
intent.putExtra("sms_body", message);
intent.putExtra(Intent.EXTRA_STREAM, attachment);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
如果您想确保 Intent 只由短信应用(而非其他电子邮件或社交应用)进行处理,则需使用 ACTION_SENDTO
操作并加入 "smsto:"
数据架构。例如:
public void composeMmsMessage(String message, Uri attachment) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setData(Uri.parse("smsto:")); // This ensures only SMS apps respond
intent.putExtra("sms_body", message);
intent.putExtra(Intent.EXTRA_STREAM, attachment);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
示例 Intent 过滤器:
<activity ...>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<data android:type="text/plain" />
<data android:type="image/*" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
注:
如果您要开发短信/彩信应用,必须为几项额外操作实现 Intent 过滤器,才能在 Android 4.4 及更高版本上成为
默认短信应用
。 如需了解详细信息,请参见
Telephony
处的文档。