我的应用程序包含一个名为 sendMms 的活动,其中指定了有关收件人号码、主题、消息和图像附件的信息。图像始终是 jpg 文件,当按下活动 sendMms 中的发送按钮时运行的代码如下所示:
public void sendMms(View view){
// The information concerning recipient number, subject and message are retrieved.
String recipient = mmsRecipientEditText.getText().toString().trim();
String subject = mmsSubjectEditText.getText().toString().trim();
String message = mmsMessageEditText.getText().toString().trim();
try{
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra("address", recipient);
intent.putExtra("subject", subject);
// The variable mmsAttachmentImageView is the ImageView for the picture of the activity.
if(mmsAttachmentImageView.getDrawable() != null){
// The variable mmsAttachmentUrl contains the path to the jpg-file containing the picture.
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile( new File(mmsAttachmentUrl.trim())));
}
intent.setType("image/jpg");
intent.putExtra("sms_body", message);
startActivity(Intent.createChooser(intent, "Send MMS with..."));
} catch(Exception e) {
Log.e(getString(R.string.log_tag), e.getMessage());
}
}
当涉及到我自己的“Samsung Galaxy S4 mini”、api 19 和“Nexus One”仿真器设备、api 19、21 和 22 时,上面的代码运行良好。带有 api 的“Nexus One”仿真器设备的结果22可以通过以下链接查看:
但是,当我尝试使用 api 23 在“Nexus One”模拟器设备上运行我的应用程序时,当在活动 sendMms 中指定所有信息并传递给消息传递应用程序时,结果如下所示:
正如你所看到的,主题或图像都没有出现。即使在我授予消息应用程序访问设备上的照片、媒体和文件的权限后,结果也是一样的。此外,结果取决于我选择传递的信息。不同组合的结果如下所示:
- 传递的信息 = 结果中显示的信息
- 收件人号码、主题、消息和图像 = 收件人号码和消息
- 收件人号码、主题和消息 = 收件人号码和消息
- 收件人编号、主题和图像 = 收件人编号
- 收件人号码、消息和图像 = 收件人号码和消息
- 主题、消息和图像 = 图像
- 收件人编号和主题 = 收件人编号
- 收件人号码和消息 = 收件人号码和消息
- 收件人编号和图像 = 收件人编号和图像
- 主题和消息 = 没有
- 主题和图像 = 图像
- 消息和图像 = 图像
- 收件人号码 = 收件人号码
- 主题 = 没有
- 消息 = 没有
- 图像 = 图像
- 无=无
如您所见,收件人号码始终显示在结果中,而消息和图像则根据组合显示。然而,该主题从未出现在结果中。
值得一提的是,我已经阅读了 ACTION_SEND 的文档,并尝试使用额外的内容,例如 Intent.EXTRA_TEXT、Intent.EXTRA_SUBJECT 和 Intent.EXTRA_PHONE_NUMBER,但没有运气。我也知道任何应用程序都不需要处理任意未记录的额外内容。但如上所述,额外的“sms_body”偶尔会起作用,额外的 Intent.EXTRA_STREAM 偶尔也会起作用,因此消息传递应用程序似乎可以识别这些额外内容,但由于某种原因并不总是能够处理这些内容。
因此,考虑到这一点,并且知道任何应用程序都不需要处理任意未记录的额外内容,我该怎么办?如何使用 api 23 成功地将所有信息传递给在我的“Nexus One”模拟器设备上运行的消息传递应用程序?