Android获取联系人信息[名字,手机,电话,公司名称,昵称]
直接实例化ContactUril类传入Context对象后,调用getContactInfo方法就可以获取,获取的为拼接好的JSON串,数据Demo会在最下面给出。
public class ContactUtil { private List<Contacts> list; private Context context; private JSONObject mailObject; private JSONArray jsonObject; private JSONArray phoneArray; public ContactUtil(Context context) { this.context = context; } // ContactsContract.Contacts.CONTENT_URI= content://com.android.contacts/contacts; // ContactsContract.Data.CONTENT_URI = content://com.android.contacts/data; /** * 得到所属列后,记住这些值,访问数据库的速度可以提高两倍 */ public static final int RAW_CONTACT_ID=42; public static final int MIMETYPE=8; public static final int DISPLAY_NAME=51; public static final int TYPE=71; public static final int NUMBER=51; public static final int COMPANY=51; public static final int NAME=51; /** * 获取联系人信息,并把数据转换成json数据 * * @return * @throws JSONException */ public String getContactInfo() throws JSONException { jsonObject = new JSONArray(); list = new ArrayList<>(); String mimetype = ""; int oldrid = -1; int contactId = -1; int numm = 0; // 1.查询通讯录所有联系人信息,通过id排序,我们看下android联系人的表就知道,所有的联系人的数据是由RAW_CONTACT_ID来索引开的 // 所以,先获取所有的人的RAW_CONTACT_ID ContentResolver resolver = context.getContentResolver(); Cursor cursor = resolver.query(ContactsContract.Data.CONTENT_URI, null, null, null, Data.RAW_CONTACT_ID); while (cursor.moveToNext()) { /** int a=cursor.getColumnIndex(Data.RAW_CONTACT_ID);*/ contactId = cursor.getInt(RAW_CONTACT_ID); if (oldrid != contactId) { mailObject = new JSONObject(); phoneArray = new JSONArray(); jsonObject.put(mailObject); numm++; oldrid = contactId; /** mailObject.put("contactId",contactId);*/ mailObject.put("insert_time", ""); } // 取得mimetype类型,扩展的数据都在这个类型里面 /** int b=cursor.getColumnIndex(Data.MIMETYPE);*/ mimetype = cursor.getString(MIMETYPE); // 1.1,拿到联系人的各种名字 if (StructuredName.CONTENT_ITEM_TYPE.equals(mimetype)) { /** int c=cursor.getColumnIndex(StructuredName.DISPLAY_NAME);*/ String display_name = cursor.getString(DISPLAY_NAME); mailObject.put("display_name", display_name); } // 1.2 获取各种电话信息 if (Phone.CONTENT_ITEM_TYPE.equals(mimetype)) { JSONObject phoneObject = new JSONObject(); /** int g=cursor.getColumnIndex(Phone.TYPE);*/ int phoneType = cursor.getInt(TYPE); // 电话 if (phoneType == Phone.TYPE_HOME) { /** int d=cursor.getColumnIndex(Phone.NUMBER);*/ String homeNum = cursor.getString(NUMBER); phoneObject.put("type", "电话"); phoneObject.put("number", homeNum); phoneArray.put(phoneObject); } // 手机 if (phoneType == Phone.TYPE_MOBILE) { /** int d=cursor.getColumnIndex(Phone.NUMBER);*/ String mobile = cursor.getString(NUMBER); phoneObject.put("type", "手机"); phoneObject.put("number", mobile); phoneArray.put(phoneObject); } } //公司名称 if (Organization.CONTENT_ITEM_TYPE.equals(mimetype)) { /** int e=cursor.getColumnIndex(Organization.COMPANY);*/ String company = cursor.getString(COMPANY); mailObject.put("company",company); } //昵称 if (Nickname.CONTENT_ITEM_TYPE.equals(mimetype)) { /** int f=cursor.getColumnIndex(Nickname.NAME);*/ String nick_name = cursor.getString(NAME); mailObject.put("nick_name",nick_name); } mailObject.put("numbers",phoneArray); } cursor.close(); return jsonObject.toString(); } }
取出的数据例子:
"device_contacts":[
{
"numbers": [
{
"type": "手机",
"number": "1 326-343-7884"
},
{
"type": "电话",
"number": "(555) 555-55"
}
],
"display_name": "Duffy",
"company": "Foggy",
"nick_name": "Foggy"
},
{
"numbers": [
{
"type": "手机",
"number": "1 326-343-7883"
},
{
"type": "电话",
"number": "(444) 444-44"
}
],
"display_name": "Wersdf",
"company": "Sdfsdf",
"nick_name": "Sdfsdfsdf"
},
{
"numbers": [
{
"type": "手机",
"number": "1 352-421-5398"
},
{
"type": "电话",
"number": "555-5555"
}
],
"display_name": "Xingming",
"company": "Gongsi",
"nick_name": "Nicheng"
}
]