【问题标题】:Android: Open SMS IntentAndroid:打开短信意图
【发布时间】:2018-08-25 13:52:34
【问题描述】:

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

以下是我正在尝试的代码

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 应用程序)然后功能中断。

问题是,它在没有 message_body(空)的情况下打开 FB Messenger,即使它正确选择了电话号码(在 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 短信 应用程序(消息应用程序),即使有人将任何其他 3rd 方短信应用程序设置为默认应用程序?
  2. 或者我可以通过任何其他方式传递 message_body 参数以在其他 3rd 方应用程序中工作吗?

【问题讨论】:

  • Facebook Messenger 已损坏。将其作为错误报告给 facebook,他们应该查看 body 字段。他们没有。
  • 仅尝试使用new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", number, null)),不要添加Intent.CATEGORY_APP_MESSAGING。我认为 URI sms 不应该选择 fbmessanger app 。还是我在这里遗漏了什么?
  • 其实我只是通过前员工反馈渠道举报的。我们会看看它是否得到任何关注。
  • @ADM,也试过了。问题是它显示了所有的 SMS 应用程序,但如果用户选择 FB Messenger,那么同样的问题会再次出现。此外,如果用户第一次选择始终打开 FB Messenger 的复选框,那么即使它不会再次显示列表。谢谢
  • 据信使团队消息,该问题在2月初就已经出现,将在下一个版本中修复。

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


【解决方案1】:

如果你真的想限制为谷歌安卓短信应用,那么可以指定谷歌应用的包名。但是还有很多其他应用程序会读取 'sms_body' Intent Key。

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); 

【讨论】:

    【解决方案2】:

    它会打开没有 message_body(空)的 FB Messenger

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

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

    EXTRA_TEXT 没有与ACTION_SENDTO 一起使用的文档,CATEGORY_APP_MESSAGING 也没有。

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

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

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

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

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

    【讨论】:

    • 您好 CommonsWare,感谢您的解释。在此链接 (developer.android.com/guide/components/…) 中,Android 解释了应该通过文本消息传递的 Intent Extras。那里的“sms_body”是短信内容。问题是 Android 允许将 3rd 方 APPS 设置为默认 SMS APP,并且由于它们不符合 Android 标准,因此功能中断。
    • 如果是这种情况,想知道是否有一种方法可以强制打开 Android SMS APP 而不是任何其他应用,即使将其中一个设置为默认值。我已经检查了 SmsManager 但真的想使用意图来支持与 IOS APP 类似的功能。
    • @JibW:“我可以强制打开安卓短信APP”——没有一个“安卓短信APP”。
    • 谢谢@CommonsWare。是的,我的意思是如果可能的话,强制打开任何默认的 GOOGLE ANROID SMS APP(如果已设置为默认 SMS APP,则不是任何首选的 3rd 方 SMS APP)。如果没有找到,请停止用户说您需要一个 GOOGLE ANDROID SMS 应用程序(不是任何第 3 方应用程序)。如果这是不可能的,那么一个适用于所有场景的工作解决方案,因为 GOOGLE 已经很好地记录了文本消息的意图附加内容。谢谢
    • @JibW: "default GOOGLE ANROID SMS APP" -- 许多设备不附带 Google 的 SMS 应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多