2017-03-08 49 views
1

我已经构建了一个短信应用程序,它支持短信活动(只有短信)的所有功能。但现在,我的问题是,当我的应用程序已经是默认的短信,我不能从通过我的应用程序发送短信到联系人视图的号码。这里是图像来解释我想达到什么。 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访问的,但它似乎不起作用,请帮忙!从联系人视图,如何发送联系人号码到我的短信应用程序,发送短信到它

+1

请编辑您的问题,以提供处理'SEND' /'SENDTO'操作的'Activity'的代码,并解释您在检索电话号码/联系人ID时遇到的问题。 –

+0

好吧,我更新了我的问题。正如我在我的问题中解释的那样,我没有任何代码来处理联系人的数据,你能建议我一个还是只是一个有用的链接? –

+0

是的,这个号码将被附加到用于启动你的Activity的'Intent'。 'onActivityResult()'方法对此不起作用。给我一分钟,我会汇总一个答案。 –

回答

0

正从通讯录中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得到个人数字,如果你收到多个。

+1

非常感谢。我会试试这个,并让你知道结果。这真的是我需要的代码 –

+0

工程就像一个魅力,谢谢,你救了我的一天! –

+0

没问题。乐意效劳。欢迎来到堆栈溢出,顺便说一句。干杯! –