Android:打开短信意图

时间:2018-03-16 13:15:39

标签: android facebook android-intent android-facebook android-sms

在我的Android应用程序中,我只需要使用预先填充的 message_body PhoneNumber 打开短信意图。

以下是我正在尝试的代码

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应用程序(设置 - >应用和通知 - >默认应用 - >短信应用)然后功能中断。

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

此外,我尝试了以下测试,但没有选择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. 有没有办法可以强行打开默认的Android短信 应用程序(消息APP)即使有人将任何其他第三方SMS应用程序设置为默认应用程序?
  2. 或者我还可以传递message_body参数以便在其他第三方应用程序中工作吗?

2 个答案:

答案 0 :(得分:2)

如果您确实要限制使用Google Android SMS应用程序,则可以指定Google App的程序包名称。但是还有很多其他的应用程序会读取' 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); 

答案 1 :(得分:1)

  

它打开没有message_body(空)的FB messenger

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

  

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

EXTRA_TEXT未记录用于ACTION_SENDTO,也未CATEGORY_APP_MESSAGING

  

有没有办法可以强行打开默认的Android短信应用程序(消息APP)

有大约10,000个Android设备型号。我预计会有几十个(如果不是数百个)预先安装的“Android SMS应用程序”。他们都不必尊重Intent未明确记录的ACTION_SENDTO额外内容或类别。

  

我可以通过其他方式传递message_body参数以在其他第三方应用程序中工作吗?

ACTION_SEND - 不是ACTION_SENDTO - 提供EXTRA_TEXT。但是,您无法强制要求发送内容的位置。这取决于用户。

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

相关问题