通讯录获取/添加信息 AddressBook

源码:AddressBook

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
package com.example.zm.addressbook;

import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.ContactsContract;
import android.text.TextUtils;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class ContactUtil {

/**
* 获取联系人信息,并把数据转换成json数据
*
* @return
* @throws JSONException
*/
public static String getContactInfo(Context context) throws JSONException {
JSONObject contactData = null;
JSONObject jsonObject = null;
JSONArray jsonArray = null;
JSONObject jsonObject2 = null;
JSONArray jsonArray2 = null;

contactData = new JSONObject();
jsonArray = new JSONArray();
String mimetype = "";
int oldrid = -1;
int contactId = -1;
// 1.查询通讯录所有联系人信息,通过id排序,我们看下android联系人的表就知道,所有的联系人的数据是由RAW_CONTACT_ID来索引开的
// 所以,先获取所有的人的RAW_CONTACT_ID
Cursor cursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, null, null, ContactsContract.Data.RAW_CONTACT_ID);
contactData.put("userId", "11111");
while (cursor.moveToNext()) {
contactId = cursor.getInt(cursor.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID));
if (oldrid != contactId) {
jsonObject = new JSONObject();
jsonArray2 = new JSONArray();
jsonArray.put(jsonObject);
oldrid = contactId;
}
mimetype = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE)); // 取得mimetype类型,扩展的数据都在这个类型里面

Bitmap headPhoto = getHighPhoto(contactId + "", context.getContentResolver());
if (null == headPhoto) {
jsonObject.put("headImageUrl", "");
} else {
jsonObject.put("headImageUrl", headPhoto);
}
// 名字
if (ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE.equals(mimetype)) {
cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME));
String firstName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));
String lastname = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));
String trueName = firstName + lastname;
if (TextUtils.isEmpty(trueName)) {
jsonObject.put("trueName", "");
} else {
jsonObject.put("trueName", trueName);
}
}
// 昵称
if (ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE.equals(mimetype)) {
cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Nickname.DISPLAY_NAME));
String nickName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Nickname.NAME));
if (TextUtils.isEmpty(nickName)) {
jsonObject.put("nickName", "");
} else {
jsonObject.put("nickName", nickName);
}
}
List<AddressBookMoudle.ContactBook> contactList = new ArrayList<AddressBookMoudle.ContactBook>();
// 1.2 获取各种电话信息
if (ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE.equals(mimetype)) {
int phoneType = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); // 手机
// 个人电话
if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) {
String mobile = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
AddressBookMoudle.ContactBook contactBook = new AddressBookMoudle.ContactBook();
contactBook.setContact(mobile);
contactBook.setContactType("0");
contactList.add(contactBook);
}
}
// Email
if (ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE.equals(mimetype)) {
String mobileEmail = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
AddressBookMoudle.ContactBook contactBook = new AddressBookMoudle.ContactBook();
contactBook.setContact(mobileEmail);
contactBook.setContactType("1");
contactList.add(contactBook);
}

if (contactList.size() > 0) {
for (int i = 0; i < contactList.size(); i++) {
jsonObject2 = new JSONObject();
jsonObject2.put("contact", contactList.get(i).getContact());
jsonObject2.put("contactType", contactList.get(i).getContactType());
jsonArray2.put(jsonObject2);
}
jsonObject.put("contactList", jsonArray2);

}

// 查找event地址
if (ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE.equals(mimetype)) { // 取出时间类型
int eventType = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.TYPE));
// 生日
if (eventType == ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY) {
String birthday = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE));
if (TextUtils.isEmpty(birthday)) {
jsonObject.put("birthDay", "");
} else {
jsonObject.put("birthDay", birthday);
}
}
}

// 获取组织信息
if (ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE.equals(mimetype)) { // 取出组织类型
int orgType = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TYPE)); // 单位
if (orgType == ContactsContract.CommonDataKinds.Organization.TYPE_CUSTOM) { // if (orgType ==
// Organization.TYPE_WORK)
// {
String company = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY));
if (TextUtils.isEmpty(company)) {
jsonObject.put("company", "");
} else {
jsonObject.put("company", company);
}
String jobTitle = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE));
if (TextUtils.isEmpty(jobTitle)) {
jsonObject.put("jobtitle", "");
} else {
jsonObject.put("jobtitle", jobTitle);
}
String department = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DEPARTMENT));
if (TextUtils.isEmpty(department)) {
jsonObject.put("department", "");
} else {
jsonObject.put("department", department);
}
}
}
}

cursor.close();
contactData.put("addressBookList", jsonArray);
Log.i("contactData", contactData.toString());
return contactData.toString();
}


/**
* 获取联系人高清头像
*
* @param people_id 联系人ID
* @param cr 调用容器
* @return 联系人的高清头像
*/
public static Bitmap getHighPhoto(String people_id, ContentResolver cr) {
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(people_id));
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri, true);
if (input == null) {
return null;
}
return BitmapFactory.decodeStream(input);
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"userId": "11111",
"addressBookList": [{
"headImageUrl": "",
"trueName": "张三",
"company": "北京xxx有限公司",
"jobtitle": "研发工程师",
"department": "",
"contactList": [{
"contact": "185 0000 1234",
"contactType": "0"
}, {
"contact": "zhangsan@163.com",
"contactType": "1"
}],
"birthDay": "2018-03-25"
}]
}
坚持原创技术分享,您的支持将鼓励我继续创作!