2010-11-29 96 views
19

如何从Android联系人获取以下字段?我使用了Android 2.2。如何从Android联系人获取名字和姓氏?

  1. 名称前缀
  2. 中间名
  3. 名称前缀
  4. 名字拼音
  5. 中间名拼音
  6. 姓氏拼音
+0

你好,我想这一点,但没有奏效。这是我的问题,我非常感谢你的帮助! :) http://stackoverflow.com/questions/35097844/get-contact-name/35098111#35098111 – 2016-01-30 05:03:29

回答

52

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

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添加为查询的附加参数 - 您将获得特定联系人的地址。

+4

一个注意:上面的查询返回您的手机中的所有(我的意思是全部)联系人(即使电子邮件没有赋予名字)。所以你应该过滤它们来获得你想要的联系人 – 2011-01-09 10:24:12

+2

而我的一个注意:MIMETYPE真的是必需的,否则你最终得不到你所期望的。我忽略了这个细节,花了我一个小时来调试它。 – 2011-12-27 15:32:44

+2

获取电话拥有者的名字和姓氏怎么样?它可行吗? – 2012-10-26 10:18:46

13

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

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(); 
6

尝试使用此代码来获取有关该联系人的所需信息,代码是这里 -

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"); 
6

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

// 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(); 
1

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"); 
    } 
} 
1

上试试这个,

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()); 
    } 
} 
相关问题