【问题标题】:From a contact view, how to send a contact number to my sms app, to send an sms to it从联系人视图中,如何将联系人号码发送到我的短信应用程序,向其发送短信
【发布时间】:2017-03-08 16:35:51
【问题描述】:

我已经构建了一个短信应用程序,它支持短信活动的所有功能(仅限短信)。但是现在,我的问题是,当我的应用程序已经是短信的默认应用程序时,当我想通过我的应用程序向它发送短信时,我无法从联系人视图中获取号码。这里有图片来解释我想要实现的目标。! When I click to the sms icon,my app is opened by I can't get the number 我没有任何代码来处理我的活动中的操作 SEND/SENDTO,但我只是在清单文件中提到了 intent-filter:action.SEND、action.SENDTO,因为如果我们想让应用程序可选,这是强制性的作为默认短信应用。我以为是从onActivityResult访问了联系人视图中的号码,但是好像不行,请帮忙!

【问题讨论】:

  • edit您的问题提供处理SEND/SENDTO操作的Activity的代码,并准确解释您在检索电话号码时遇到的问题/联系人 ID。
  • 好的,我更新了我的问题。正如我在问题中解释的那样,我没有任何代码来处理来自联系人的数据,你能给我推荐一个或只是一个有用的链接吗?
  • 是的,该号码将附加到用于启动您的ActivityIntentonActivityResult() 方法对此不起作用。给我一分钟,我会整理一个答案。
  • 非常感谢,所以我在等待

标签: android sms contact


【解决方案1】:

当从通讯录获取SENDTO 时,该号码(可能是多个号码)将作为数据Uri 附加到启动您的ActivityIntent 上。初始化您的 Activity 时,请检查适当的操作,并在必要时检索号码。

举个基本的例子:

if (Intent.ACTION_SENDTO.equals(getIntent().getAction())) {
    Uri data = getIntent().getData();
    String numbers = data.getSchemeSpecificPart();
}

为了实现更可靠的实现,谨慎的做法是去除Uri 上可能存在的任何其他参数,并替换任何非拉丁数字。

if (Intent.ACTION_SENDTO.equals(getIntent().getAction())) {
    Uri data = getIntent().getData();
    String numbers = data.getSchemeSpecificPart();

    // Strip any extraneous parameters
    int i = numbers.indexOf('?');
    numbers = (i == -1) ? numbers : numbers.substring(0, i);

    // Replace non-Latin digits, and ensure our delimiter is something we expect
    numbers = PhoneNumberUtils.replaceUnicodeDigits(numbers).replace(",", ";");
    ...
}

如果收到多个号码,它们应该以逗号或分号分隔的String 出现。上面用分号替换了逗号,所以我们以后不用担心用了哪个。如果您收到多个号码,您可以简单地通过split()numbers 获取个人号码。

【讨论】:

  • 非常感谢。我会试试这个,让你知道结果。这真的是我需要的那种代码
  • 没问题。乐意效劳。欢迎来到 Stack Overflow,顺便说一句。干杯!
猜你喜欢
  • 2011-07-25
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多