从联系人选择器和光标获取相同的ID

时间:2014-08-24 21:17:58

标签: java android android-intent android-cursor

我正在使用联系人选择器:

startActivityForResult(
    new Intent(
        Intent.ACTION_PICK,
        Phone.CONTENT_URI
    ), CONTACT_PICKER_RESULT //1001
);

此类型的联系人选择器会选择联系人的特定电话号码。

然后我获得此联系人的ID:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode != CONTACT_PICKER_RESULT || resultCode != RESULT_OK)
        return;

    String id = data.getData.getLastPathSegment();
}

但是,当我使用PhoneLookup查询时,例如:

Cursor cur = getContentResolver().query(
    Uri.withAppendedPath(
        PhoneLookup.CONTENT_FILTER_URI,
        Uri.encode(...) //phone number of contact is filled in
    ),
    new String[] {
        PhoneLookup.DISPLAY_NAME,
        Phone._ID
    }, null, null, null
);

if (!cur.moveToFirst())
    return;

String id = cur.getString(
    cur.getColumnIndex(Phone._ID)
);

我从PhoneLookup获得的ID与onActivityResult的不同。例如,联系人选择器返回1408,而光标返回444。

我怎样才能得到:

data.getData().getLastPathSegment()等于cur.getColumnIndex(...)

1 个答案:

答案 0 :(得分:0)

在这种情况下,您无法使用PhoneLookup。您需要查询Phone.CONTENT_URI以获取与联系人选择器匹配的ID。以下代码就是这样做的。

Cursor cur = getContentResolver().query(
    Phone.CONTENT_URI,
    new String[] {
        Phone.DISPLAY_NAME,
        Phone._ID
    },
    Phone.NORMALIZED_NUMBER + "=?",
    new String[] {
        ... //phone number placed here
    }, null);
    if (!cur.moveToFirst())
        return;

String id = cur.getString(cur.getColumnIndex(Phone._ID)));