【问题标题】:Android - contact id is not the selected contact out of the intentAndroid - 联系人ID不是出于意图而选择的联系人
【发布时间】:2015-04-02 15:09:20
【问题描述】:

当用户需要选择一个联系人时,我称之为intent:

Intent pickContactIntent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI );
pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);

在 onActivityResult 我有以下内容:

Uri pickedContact = intent.getData();
Cursor cursor = getContentResolver().query(pickedContact, null, null, null, null);
   if (cursor.moveToFirst()) {
       contactInfo.name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
       contactInfo.photo = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI));

       Cursor pCur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                            new String[]{cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))}, null);
}

虽然 DISPLAY_NAME 和 PHOTO_THUMBNAIL_URI 按预期工作,但 _ID 似乎属于不同的联系人,因此电话号码光标会检索(不同联系人的)不相关的电话号码。我错过了什么?

【问题讨论】:

    标签: android android-intent android-contacts


    【解决方案1】:

    您指定为Intent 的数据的Uri 与您设置的mimetype 不匹配。

    对于您使用的数据Contacts.CONTENT_URI,它的mimetype 为Contacts.CONTENT_TYPE(其值为“vnd.android.cursor.dir/contact”)。对于 mimetype,您将其设置为 CommonDataKinds.Phone.CONTENT_TYPE(其值为“vnd.android.cursor.dir/phone_v2”),通常与 Uri CommonDataKinds.Phone.CONTENT_URI 相关联。

    发生的情况是您实际上是在选择电话,因此您得到的是电话的内容 Uri 而不是联系人。当您提取显示名称和缩略图照片 Uri 时,这并不明显,因为当您查询电话时,这些列无论如何都来自联系人。但是,_ID 是用于电话的,而不是联系人的。

    把你的代码改成

    pickContactIntent.setType(Contacts.CONTENT_TYPE)

    ...或者干脆取消对setType()的调用,因为系统无论如何都会解决它。

    【讨论】:

    • 感谢它的工作。但是有一个问题,您写道“当您提取显示名称和缩略图 Uri 时,这并不明显,因为这些列仍然来自联系人”:这是否意味着我可以使用电话号码光标而不是查询两次来获取此信息和我现在一样?
    • 是的,您可以从电话号码查询中获取。如果您从 Uri 中提取联系人 ID 而不是执行第一个查询(例如使用 ContentUris.parseId(intent.getData())),这可以为您节省查询时间
    猜你喜欢
    • 2017-05-10
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多