2012-09-05 82 views
7

我需要比较两个电话号码以确定它们是否来自同一个发件人/收件人。用户可能会向联系人发送消息,并且该联系人可能会回复。比较Android中的电话号码

答复通常在 +[country-code][area-code-if-any][and-then-the-actual-number]格式。例如, +94 71 2593276为斯里兰卡电话号码。

而当用户发送消息时,他通常会以格式(对于上述示例)0712593276(假设他也在斯里兰卡)输入格式。

所以我需要的是,我需要检查这两个数字是否相同。这个应用程序将在国际上使用。所以我不能用0代替前两位数字(那么对于像美国这样的国家来说这将是一个问题)。有没有什么方法可以在Java或Android中专门做到这一点?

谢谢。

+0

电话号码不遵循适用于每个国家的简单规则。您需要为每个国家编码案例。 –

+0

@PeterLawrey这似乎有点极端.. :)但它应该是可能的。想想股票Android通讯应用程序。它会识别我们是否同时输入它的相同数字。 – Roshnal

+0

我想它有一个查找表。无论如何读取或反编译这个应用程序的来源? –

回答

2

如何检查数字是否是接收者号码的子字符串?

例如,假设我的巴西号码是888-777-666,您的号码是111-222-333。 要拨打电话,从这里开始,我需要拨打其他号码拨打国际电话。假设我需要添加9999 + your_number,导致9999111222333.

如果RawNumber.substring(your_number)返回true我可以说我打电话给你。

-1

只适用你的逻辑

public static boolean compare (String a, String b) 

照照删除()和 - 并按照PhoneNumberUtils

5

android.telephony. PhoneNumberUtils班级提供几乎所有必要的功能来处理电话号码和标准。

对于你的情况,解决的办法是PhoneNumberUtils. compare(Context context, String number1, String number2)否则PhoneNumberUtils. compare(String number1, String number2)。前者一个检查资源,以确定是否使用了严格的或松散比较算法,从而更好的选择,在大多数情况下。

PhoneNumberUtils.compare("0712593276", "+94712593276") // always true 
PhoneNumberUtils.compare("0712593276", "+44712593276") // always true 

// true or false depends on the context 
PhoneNumberUtils.compare(context, "0712593276", "+94712593276") 

看看官方documentation。和source code