我已经构建了一个短信应用程序,它支持短信活动的所有功能(仅限短信)。但现在,我的问题是,当我的应用程序已经是短信的默认应用时,当我想通过我的应用向他发送短信时,我无法从联系人视图中获取该号码。这里有图像来解释我想要实现的目标。 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访问的,但似乎不起作用,请帮忙!
答案 0 :(得分:0)
从“通讯录”中获取SENDTO
时,该号码(可能是多个号码)将作为数据Uri
附加到Intent
启动Activity
的{{1}}。初始化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
来获取个别号码。