6

在我的 Android 应用程序中,我只需要使用预先填充的message_bodyPhoneNumber打开 SMS 意图。

以下是我正在尝试的代码

Uri uri = Uri.parse(String.format("smsto:%s", strPhoneNumber));
Intent smsIntent = new Intent(Intent.ACTION_SENDTO, uri);
smsIntent.putExtra("sms_body", "Sample Body");
startActivityForResult(smsIntent, OPEN_SMS_APP);

在默认情况下一切正常,但如果安装了Facebook Messenger并将其设置为默认 SMS 应用程序(设置 -> 应用程序和通知 -> 默认应用程序 -> SMS 应用程序),则功能会中断。

问题是,即使它正确选择了电话号码(在 FB Messenger APP 中),它也会在没有message_body (空)的情况下打开 FB Messenger。

此外,我尝试了以下测试,但没有选择 SMS_BODY 或打开默认的 Android APP

smsIntent.addCategory(Intent.CATEGORY_APP_MESSAGING); // STILL DIDN'T FIX
smsIntent.putExtra(Intent.EXTRA_TEXT, "Sample Body"); // STILL DIDN'T FIX

问题

  1. 即使有人将任何其他 3rd 方 SMS 应用程序设置为默认应用程序,有没有办法强制打开默认的 Android SMS 应用程序(消息应用程序)?
  2. 或者我可以通过什么其他方式传递 message_body 参数以在其他 3rd 方应用程序中工作?
4

2 回答 2

4

如果你真的想限制到谷歌安卓短信应用,那么可以指定谷歌应用的包名。但是还有很多其他应用程序会读取“sms_body”意图密钥。

Uri uri = Uri.parse(String.format("smsto:%s", strPhoneNumber));
Intent smsIntent = new Intent(Intent.ACTION_SENDTO, uri);
smsIntent.putExtra("sms_body", "Sample Body");
// To Force Google Android SMS APP To Open
smsIntent.setPackage("com.google.android.apps.messaging"); 
if (smsIntent.resolveActivity(getPackageManager()) != null)
{
    startActivityForResult(smsIntent, OPEN_SMS_APP);
}
else
{
    // Display error message to say Google Android SMS APP required.
}

但我会使用应用程序选择器,而不是仅限于 Google SMS 应用程序。显然,用户必须经过一个额外的步骤(单击),但它会列出所有 SMS 应用程序(每次),并且用户可以选择选择正确工作的 SMS 应用程序。

startActivityForResult(Intent.createChooser(smsIntent, "Sample Title"), OPEN_SMS_APP); 
于 2018-03-23T16:28:14.843 回答
0

它打开没有 message_body 的 FB 信使(空)

任何应用程序都不需要尊重未记录的Intent额外内容。

此外,我尝试了以下测试,但没有选择 SMS_BODY 或打开默认的 Android APP

EXTRA_TEXT没有记录与 一起使用ACTION_SENDTO,也没有CATEGORY_APP_MESSAGING

有没有办法可以强制打开默认的 Android SMS 应用程序(Messages APP)

大约有 10,000 种 Android 设备型号。我预计会有几十个(如果不是几百个)预装的“Android SMS 应用程序”。他们中的任何一个都不必尊重Intent未特别记录以支持的额外内容或类别ACTION_SENDTO

还有其他方法可以传递 message_body 参数以在其他 3rd 方应用程序中工作吗?

ACTION_SEND- 不ACTION_SENDTO- 提供EXTRA_TEXT。但是,您不能强制要求将内容发送到何处。那将取决于用户。

如果您拥有权限,您也可以使用SmsManager直接发送短信。SEND_SMS

于 2018-03-16T14:09:34.467 回答