我試圖通過顯示名稱查找聯繫人。目標是打開此聯繫人並向其中添加更多數據(特別是更多電話號碼),但我很難找到要更新的聯繫人。Android - 通過顯示名稱查找聯繫人
這是我使用的代碼:
public static String findContact(Context context) {
ContentResolver contentResolver = context.getContentResolver();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI;
String[] projection = new String[] { PhoneLookup._ID };
String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " = ?";
String[] selectionArguments = { "John Johnson" };
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArguments, null);
if (cursor != null) {
while (cursor.moveToNext()) {
return cursor.getString(0);
}
}
return "John Johnson not found";
}
我有一個名爲「約翰·約翰遜」接觸,但該方法總是返回「未找到」。我也嘗試用一個名字搜索聯繫人,所以這沒有什麼區別。
我懷疑它的uri,選擇或選擇參數有問題,因爲我找不到任何搜索具有給定顯示名稱的聯繫人的示例,並且它似乎顯示名稱是一種特殊類型的信息,不同於例如電話號碼。
任何想法如何找到約翰遜約翰遜?
更新:我發現瞭如何找到顯示名稱聯繫人:
ContentResolver contentResolver = context.getContentResolver();
Uri uri = Data.CONTENT_URI;
String[] projection = new String[] { PhoneLookup._ID };
String selection = StructuredName.DISPLAY_NAME + " = ?";
String[] selectionArguments = { "John Johnson" };
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArguments, null);
if (cursor != null) {
while (cursor.moveToNext()) {
return cursor.getString(0);
}
}
return "John Johnson not found";
此代碼返回與顯示名稱爲「約翰·約翰遜的」第一次接觸的接觸ID。在我的原始代碼中,我的查詢中有錯誤的uri和錯誤的選擇。
感謝回答,但它並沒有幫助有空投影。當我搜索電話號碼時,相同的代碼有效,因此即使我在另一列中搜索匹配,也可以將PhoneLookup._ID用作投影。 如果我正確地理解了它,那麼投影就是你想從查詢中得到的數據,而不是你要搜索的數據。因此,如果您將投影設置爲null,則只需要從您的查詢中獲取匹配聯繫人的所有數據即可。 – 2012-03-10 18:58:48