联系人存在于联系人列表中。

7

我有一个电话号码。有没有办法检查设备的联系人数据库中是否存在该电话号码?根据这个,我需要在我的应用程序中进一步操作。请建议或者如果有任何人可以提供示例代码片段。

以下是我编写的代码:

public boolean contactExists(Activity _activity, String number) {
    String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME };
    Cursor cur = _activity.getContentResolver().query(number, mPhoneNumberProjection, null, null, null);
    try {
        if (cur.moveToFirst()) {
            return true;
        }
    } finally {
        if (cur != null)
            cur.close();
    }
    return false;
}// contactExists

Thanks in Advance...


嗨@user1306412,在我的情况下,这个函数总是返回false,我按照答案所说的做了,你能给我一些建议吗? - Nirav Mehta
3个回答

23
public boolean contactExists(Activity _activity, String number) {
    if (number != null) {
        Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
        String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME };
        Cursor cur = _activity.getContentResolver().query(lookupUri, mPhoneNumberProjection, null, null, null);
        try {
            if (cur.moveToFirst()) {
                return true;
            }
        } finally {
            if (cur != null)
                cur.close();
        }
        return false;
    } else {
        return false;
    }
}// contactExists

处理了空指针异常。


你好 @Ishu,我的条件总是返回 false,我检查了它是否返回 true,如果不重复就插入记录,否则不插入。但它始终返回 false。 - Nirav Mehta
@NiravMehta - 我建议你不要在不尝试理解代码的情况下复制其他人的代码。 - Stephen C
@Ishu - 处理这样的空参数是一个不好的想法。最好让NPE发生,然后当它发生时,追踪你为什么要使用“contactExists”和一个“null”参数。修复根本原因的错误总比隐藏它要好。 - Stephen C
我该如何通过_ID检查联系人?如果将参数“number”分配为_ID,则此代码始终返回“false”。 - Konstantin Konopko

3
你的代码中需要进行小的更改:: 你需要有lookupUri..
public boolean contactExists(Activity _activity, String number) {
    Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
    String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME };
    Cursor cur = _activity.getContentResolver().query(lookupUri, mPhoneNumberProjection, null, null, null);
    try {
        if (cur.moveToFirst()) {
            return true;
        }
    } finally {
        if (cur != null)
            cur.close();
    }
    return false;
}// contactExists

0

我在一个冰淇淋设备(SIII)上尝试了上面的代码,但它没有起作用。所以经过一些搜索,我最终创建了这个方法(它很好地工作)

    private boolean isContact(String incommingNumber) {
        Cursor cursor =null;
        String name = null;
        try {
            Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(incommingNumber));
             cursor = MainService.this.getContentResolver().query(uri, new String[] { PhoneLookup.DISPLAY_NAME }, null, null, null);
            if (cursor != null && cursor.moveToFirst()) {
                name = cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME));
            }
        } finally {
            if(cursor!=null){
                cursor.close();
            }
        }
        return Util.hasValue(name);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接