我正在尝试查询联系人的显示名称:
@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联系人才会返回空白。
现在我没有想法。有没有人遇到过这个?
提前致谢。
答案 0 :(得分:1)
我在HTC Incredible S上遇到了同样的问题,这让我觉得它可能是HTC手机的问题。无论如何,我最终使用的解决方法是从您使用data
意图获得的包中检索电话号码。
final String phoneNumber = data.getStringExtra("android.intent.extra.PHONE_NUMBER");
此时你需要做一些“反向逻辑”来使用PhoneLookup获取联系人的其他数据。