android找到正确的电话号码
给定一个电话号码作为字符串,如何找到存储在联系人中的正确值?android找到正确的电话号码
实施例:
给定电话号码:在接触9743343954
电话号码:919743343954
编辑:数字的长度不是固定的。
谢谢。
我不知道我明白你的意思,但也许这将帮助你:
//Find contact by given number
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode("9743343954"));
String[] projection = new String[] { PhoneLookup.NUMBER, PhoneLookup.NORMALIZED_NUMBER };
Cursor c = getContentResolver().query(uri, projection, null, null, null);
if (c.moveToFirst()) {// while(c.moveToNext()){
//get number assigned by user to given contact, in this case 9743343954
String number = c.getString(c.getColumnIndexOrThrow(PhoneLookup.NUMBER));
//get normalized E164 number, in this case +919743343954
String normalized = c.getString(c.getColumnIndexOrThrow(PhoneLookup.NORMALIZED_NUMBER));
Toast.makeText(getApplicationContext(), "Number: " + number + "; normalized: " + normalized,
Toast.LENGTH_LONG).show();
}
c.close();
为了使这个作品添加权限清单项目:
<uses-permission android:name="android.permission.READ_CONTACTS" />
以您的示例为例,电话号码长度为10个字符,联系人为13个,您希望最后10个匹配。所以,像这样:
// I am assuming that you've removed all spaces, full stops,
// dashes etc from the two input variables
public boolean numbersMatch(String numberToMatch, String numberFromContacts) {
// Ensure that the both numbers are of a reasonable length
if (numberToMatch.length() < 9) return false;
if (numberFromContacts.length() < 9) return false;
// Is the number to match hidden in the contacts number
if (numberFromContacts.lastIndexOf(numberToMatch) != -1) return true;
// Or is the contact number hidden in the number to macth
if (numberToMatch.lastIndexOf(numberFromContacts) != -1) return true;
// No match, so return false
return false;
}
第一步是去除所有多余的空格和多余的字符:
//Removes the extra characters from the incoming number
private String removeExtraCharacters(String phoneNumber){
try
{
phoneNumber = phoneNumber.replace("(", "");
phoneNumber = phoneNumber.replace(")", "");
phoneNumber = phoneNumber.replace("-", "");
phoneNumber = phoneNumber.replace(" ", "");
phoneNumber = phoneNumber.replace("+", "");
}
catch (Exception e)
{
Log.e("Cal Reciever_R", e.toString());
}
return phoneNumber;
}
现在你可以使用的子方法得到的10位数字和ignorin的+91从前面如下:
phoneNumber =phoneNumber .substring(phoneNumber .length()-10);
你为什么不这样做
假设手机麻木呃给出的是
String a = "9123456789";
而且一个触点是
String b = "+91-9123456789";
然后,你可以很容易地检查这种方式
if(b.contains(a))
{
//Do what you want!
}
如果我有一个数字“+ 91-9123456789”和一个短的本地“234567”?他们必须有所不同。 – Gaket 2018-02-07 01:47:37
从@Lecho答案似乎是好,如果你想获得相关的接触(或相关信息)。从Android的文档此页面上的更多信息http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.html
据我所知,PhoneLookup.NORMALIZED_NUMBER是因为API 16
另一方面可用,如果要比较两个数字,看看他们是相同,但两种不同的方式,你可以使用格式化:
PhoneNumberUtils.compare(phoneNumber1, phoneNumber2)
最佳,
如果你很高兴与下面的答案之一,请千万记得要接受它!它鼓励人们提供答案:-) – 2013-03-02 16:46:45