4

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

@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

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

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

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

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

  • 并非所有 facebook 联系人都会导致此问题:我有 HTC One X,如果操作系统发现它们之间存在关系,我可以在电话簿上“链接”联系人(例如,如果它检测到 gmail 帐户和 facebook 帐户的相似电话号码,它建议我在它们之间“链接”)。只有未“链接”的 facebook 联系人返回空。

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

提前致谢。

4

1 回答 1

1

我在 HTC Incredible S 上遇到了同样的问题,这让我认为这可能是 HTC 手机的问题。无论如何,我最终使用的解决方法是从您返回的捆绑包中检索电话号码data

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

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

于 2013-01-14T23:43:26.790 回答