0

我的应用程序包含一个名为 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 22

但是,当我尝试使用 api 23 在“Nexus One”模拟器设备上运行我的应用程序时,当在活动 sendMms 中指定所有信息并传递给消息传递应用程序时,结果如下所示:

消息应用程序结果 api 23

正如你所看到的,主题或图像都没有出现。即使在我授予消息应用程序访问设备上的照片、媒体和文件的权限后,结果也是一样的。此外,结果取决于我选择传递的信息。不同组合的结果如下所示:

  • 传递的信息 = 结果中显示的信息
  • 收件人号码、主题、消息和图像 = 收件人号码和消息
  • 收件人号码、主题和消息 = 收件人号码和消息
  • 收件人编号、主题和图像 = 收件人编号
  • 收件人号码、消息和图像 = 收件人号码和消息
  • 主题、消息和图像 = 图像
  • 收件人编号和主题 = 收件人编号
  • 收件人号码和消息 = 收件人号码和消息
  • 收件人编号和图像 = 收件人编号和图像
  • 主题和消息 = 没有
  • 主题和图像 = 图像
  • 消息和图像 = 图像
  • 收件人号码 = 收件人号码
  • 主题 = 没有
  • 消息 = 没有
  • 图像 = 图像
  • 无=无

如您所见,收件人号码始终显示在结果中,而消息和图像则根据组合显示。然而,该主题从未出现在结果中。

值得一提的是,我已经阅读了 ACTION_SEND 的文档,并尝试使用额外的内容,例如 Intent.EXTRA_TEXT、Intent.EXTRA_SUBJECT 和 Intent.EXTRA_PHONE_NUMBER,但没有运气。我也知道任何应用程序都不需要处理任意未记录的额外内容。但如上所述,额外的“sms_body”偶尔会起作用,额外的 Intent.EXTRA_STREAM 偶尔也会起作用,因此消息传递应用程序似乎可以识别这些额外内容,但由于某种原因并不总是能够处理这些内容。

因此,考虑到这一点,并且知道任何应用程序都不需要处理任意未记录的额外内容,我该怎么办?如何使用 api 23 成功地将所有信息传递给在我的“Nexus One”模拟器设备上运行的消息传递应用程序?

4

0 回答 0