如何获取Android联系人的名字和姓氏?

如何从Android联系人获取以下字段? 我使用Android 2.2。

  1. 名称前缀
  2. 名字
  3. 中间名字
  4. 名称前缀
  5. 注音名
  6. 拼音中间名
  7. 注音族姓

Solutions Collecting From Web of "如何获取Android联系人的名字和姓氏?"

看看ContactsContract.CommonDataKinds.StructuredName类。 你可以在那里find你正在寻找的所有列。 尝试像这样:

  String whereName = ContactsContract.Data.MIMETYPE + " = ?"; String[] whereNameParams = new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }; Cursor nameCur = contentResolver.query(ContactsContract.Data.CONTENT_URI, null, whereName, whereNameParams, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME); while (nameCur.moveToNext()) { String given = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)); String family = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)); String display = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME)); } nameCur.close(); 

它返回联系人中的所有名字。 更确切地说,你可以添加一个联系人ID作为附加参数的查询 – 你会得到特定的联系地址。

对于指定的联系人,你可以这样做:

 String whereName = ContactsContract.Data.MIMETYPE + " = ? AND " + ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + " = ?"; String[] whereNameParams = new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, contact_ID }; Cursor nameCur = contentResolver.query(ContactsContract.Data.CONTENT_URI, null, whereName, whereNameParams, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME); while (nameCur.moveToNext()) { String given = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)); String family = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)); String display = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME)); } nameCur.close(); 

尝试使用此代码获取有关联系人所需的信息,代码在这里 –

 import android.provider.ContactsContract.Contacts; import android.database.Cursor; // Form an array specifying which columns to return, you can add more. String[] projection = new String[] { ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone ContactsContract.CommonDataKinds.Email }; Uri contacts = ContactsContract.Contacts.CONTENT_LOOKUP_URI; // id of the Contact to return. long id = 3; // Make the query. Cursor managedCursor = managedQuery(contacts, projection, // Which columns to return null, // Which rows to return (all rows) // Selection arguments (with a given ID) ContactsContract.Contacts._ID = "id", // Put the results in ascending order by name ContactsContract.Contacts.DISPLAY_NAME + " ASC"); 

作为另一个例子(仅仅为了好玩),但是用于获取单个用户的联系人姓名:

 // A contact ID is fetched from ContactList Uri resultUri = data.getData(); Cursor cont = getContentResolver().query(resultUri, null, null, null, null); if (!cont.moveToNext()) { Toast.makeText(this, "Cursor contains no data", Toast.LENGTH_LONG).show(); return; } int columnIndexForId = cont.getColumnIndex(ContactsContract.Contacts._ID); String contactId = cont.getString(columnIndexForId); // Fetch contact name with a specific ID String whereName = ContactsContract.Data.MIMETYPE + " = ? AND " + ContactsContract.CommonDataKinds.StructuredName.CONTACT_ID + " = " + contactId; String[] whereNameParams = new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }; Cursor nameCur = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, whereName, whereNameParams, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME); while (nameCur.moveToNext()) { String given = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)); String family = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)); String display = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME)); Toast.makeText(this, "Name: " + given + " Family: " + family + " Displayname: " + display, Toast.LENGTH_LONG).show(); } nameCur.close(); cont.close(); 

一些链接让你开始,除了Raunak的build议:

2015年底在棉花糖上试用ContactsContract.Data.CONTENT_URI 。 我无法获得GIVEN_NAME或类似的字段。 我认为后来的apis已经废弃了这些。 运行以下代码以打印出手机中的列

 Uri uri = ContactsContract.Data.CONTENT_URI; String selection = ContactsContract.Data.MIMETYPE + " = ?"; String[] selectionArgs = new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE}; Cursor cursor = contentResolver.query( uri, // URI representing the table/resource to be queried null, // projection - the list of columns to return. Null means "all" selection, // selection - Which rows to return (condition rows must match) selectionArgs, // selection args - can be provided separately and subbed into selection. null); // string specifying sort order if (cursor.getCount() == 0) { return; } Log.i("Count:", Integer.toString(cursor.getCount())); // returns number of names on phone while (cursor.moveToNext()) { // Behold, the firehose! Log.d(TAG, "-------------------new record\n"); for(String column : cursor.getColumnNames()) { Log.d(TAG, column + ": " + cursor.getString(cursor.getColumnIndex(column)) + "\n"); } } 

尝试这个,

 public void onActivityResult(int reqCode, int resultCode, Intent data) { super.onActivityResult(reqCode, resultCode, data); try { if (resultCode == Activity.RESULT_OK) { Uri contactData = data.getData(); Cursor cur = managedQuery(contactData, null, null, null, null); ContentResolver contect_resolver = getContentResolver(); if (cur.moveToFirst()) { String id = cur.getString(cur.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); String name = ""; String no = ""; Cursor phoneCur = contect_resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null); if (phoneCur.moveToFirst()) { name = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); no = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } Log.e("Phone no & name :***: ", name + " : " + no); txt.append(name + " : " + no + "\n"); id = null; name = null; no = null; phoneCur = null; } contect_resolver = null; cur = null; // populateContacts(); } } catch (IllegalArgumentException e) { e.printStackTrace(); Log.e("IllegalArgumentException::", e.toString()); } catch (Exception e) { e.printStackTrace(); Log.e("Error :: ", e.toString()); } } 

在这里检查是有代码完全是这样的: http : //developer.android.com/guide/topics/ui/layout/listview.html