在我的Android应用程序中,当一个来电我希望显示我的自定义ui,我能够做到这一点。 不,我想检查收到的号码是否来自联系人。 下面是我执行此操作的代码,但它会为存储在我的联系人列表中的传入号码返回null。
public String findNameByNumber(String num){
Uri uri = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, Uri.encode(num));
String name = null;
Cursor cursor = mContext.getContentResolver().query(uri,
new String[] { Phones.DISPLAY_NAME }, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
name = cursor.getString(cursor.getColumnIndex(Phones.DISPLAY_NAME));
cursor.close();
callyName.setText(name+" Calling..");
}
return name;
}
并且我有来自一个号码的来电+ 917878787878,但在我的联系人中,此联系人存储为名称XYZ,编号为78 78 787878,这是因为数字之间有空格而形成,并且还尝试排除+91但仍然它返回null。 那么我怎样才能找到以任何格式存储的号码。哪些号码可以与国家代码一起存储。
提前致谢。
答案 0 :(得分:6)
请尝试使用此代码(使用PhoneLookup.CONTENT_FILTER_URI代替电话):
String res = null;
try {
ContentResolver resolver = ctx.getContentResolver();
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
Cursor c = resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME}, null, null, null);
if (c != null) { // cursor not null means number is found contactsTable
if (c.moveToFirst()) { // so now find the contact Name
res = c.getString(c.getColumnIndex(CommonDataKinds.Phone.DISPLAY_NAME));
}
c.close();
}
} catch (Exception ex) {
/* Ignore */
}
return res;
正如文档所说ContactsContract.PhoneLookup:表示查找电话号码的结果的表格,例如来电者ID。要执行查找,您必须将要查找的数字附加到CONTENT_FILTER_URI。此查询已高度优化。