检索联系人的昵称,第2部分

时间:2010-08-14 16:08:46

标签: android contacts

几个星期前,我问了同样的问题here。起初,我认为答案解决了我的问题,但他们没有。我只是没有注意到我无法用这些答案来解决我的问题。

然而,我现在得到的是:

final Cursor phoneCursor = context.getContentResolver().query(Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode("'" + incomingNumber + "'")), null, null, null, null);
phoneCursor.moveToFirst();

String lookupString = phoneCursor.getString(phoneCursor.getColumnIndex(PhoneLookup.LOOKUP_KEY));

final Cursor dataCursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, ContactsContract.Data.LOOKUP_KEY + "=" + "'" + lookupString + "'", null, null);
dataCursor.moveToFirst();

Log.e("smn", "display_name: " + dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)));
Log.e("smn", "nickname: " + dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.Data.DATA1)));

输出如下:

08-14 17:41:02.106: ERROR/smn(20146): display_name: Tom Tasche
08-14 17:41:02.106: ERROR/smn(20146): nickname: null

This answer告诉我,昵称保存在数据表中,但是虽然我在查询数据表,但我没有检索保存在地址簿中的联系人别名。

contact with alias

我已经尝试过另一种方式:我为此联系人插入了一个新别名。这很好。所以,绰号似乎有效。 此外,我已经打印出保存在数据表中的每个字段,再次,没有运气。

有什么想法吗?也许我做的事情完全错了,但此刻我看不出有什么问题......

感谢您的帮助

汤姆

1 个答案:

答案 0 :(得分:0)

我找到了“解决方法”:

Uri uri = Uri.withAppendedPath(Contacts.CONTENT_VCARD_URI, lookup);
InputStream stream = settings.context.getContentResolver().openInputStream(uri);

int length = stream.available();
if (length <= 0) {
    return;
}

byte[] vcard = new byte[length];
int bytesRead = stream.read(vcard, 0, length);
if (bytesRead < length) {
    return;
}

String vcardString = new String(vcard, 0, bytesRead, "UTF-8");

String SPLIT = "X-ANDROID-CUSTOM:vnd.android.cursor.item/nickname;";
if (vcardString.contains(SPLIT)) {
    vcardString = vcardString.substring(vcardString.indexOf(SPLIT) + SPLIT.length());
    vcardString = vcardString.substring(0, vcardString.indexOf(';'));

    name = vcardString;
}

这真的很愚蠢,但它的工作原理并没有那么慢(~300毫秒)。

祝你好运

汤姆