查询联系人 - SOMETIMES返回空光标

时间:2012-12-11 15:31:15

标签: android contacts contactscontract

我正在尝试查询联系人的显示名称:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case REQ_CODE_PICK_CONTACT:
        if (resultCode == Activity.RESULT_OK) {
            Uri contactUri = data.getData();

            ContentResolver cr = getActivity().getContentResolver();
            Cursor c = cr.query(contactUri, null, null, null, null);

            if (c != null && c.moveToFirst()) {
                //get the contact name
            }
        }
        break;
    }
}

现在问题在于:

对于某些联系人,光标返回空,我不明白为什么。 我检查了contactUri的值,它看起来像:content://com.android.contacts/data/3032

对于我尝试过的所有类型的联系人,Uri看起来都一样 - facebook,google,phone等。

对于某些联系人,光标会返回一个结果,这很好,我可以提取名称。但是对于其他人来说,即使ContentUri完全相同,它也是空的,它起源于Intent.getData()。

以下是一些可能与这个奇怪问题有关的事实:

  • 所有具有空光标的联系人都是Facebook联系人。 Uri看起来就像上面一样。

  • 并非所有的Facebook联系人都会导致这种情况:我有HTC One X,如果操作系统发现它们之间的关系(例如,如果它检测到类似的电话号码,我可以在电话簿上“链接”联系人)一个gmail帐户和facebook帐号,它建议我在它们之间“链接”)。只有非“已关联”的Facebook联系人才会返回空白。

现在我没有想法。有没有人遇到过这个?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我在HTC Incredible S上遇到了同样的问题,这让我觉得它可能是HTC手机的问题。无论如何,我最终使用的解决方法是从您使用data意图获得的包中检索电话号码。

final String phoneNumber = data.getStringExtra("android.intent.extra.PHONE_NUMBER");

此时你需要做一些“反向逻辑”来使用PhoneLookup获取联系人的其他数据。