- import java.io.InputStream;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import android.content.ContentUris;
- import android.content.Context;
- import android.database.Cursor;
- import android.net.Uri;
- import android.provider.ContactsContract;
- import android.util.Log;
- public class CopyOfContactCollector {
- private static final String TAG = CopyOfContactCollector.class.getSimpleName();
- private static final String KEY_BIRTH = "birthday";
- private static final String KEY_ADDR = "address";
- private static final String KEY_NICKNAME = "nickname";
- private static final String KEY_ORG = "org";
- private static final String KEY_IM = "IM";
- private static final String KEY_NOTE = "note";
- private static final String KEY_EMAIL = "email";
- private static final String KEY_PHONE = "phone";
- private static final String KEY_WEBSITE = "website";
- private static final String KEY_PHOTO = "photo";
- private Context context;
- public CopyOfContactCollector(Context context) {
- this.context = context;
- }
- public void getContacts() {
- Cursor cursor = null;
- try {
- cursor = context.getContentResolver().query(
- ContactsContract.Contacts.CONTENT_URI,
- null,
- null,
- null,
- null);
- JSONArray contactList = new JSONArray();
- while (cursor.moveToNext()) {
- String contactId = cursor.getString(cursor
- .getColumnIndex(ContactsContract.Contacts._ID));
- int hasPhone = cursor.getInt(cursor
- .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
- String contactName = cursor.getString(cursor
- .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
- long photoId = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
- JSONObject item = new JSONObject();
- item.put("id", contactId);
- item.put("name", contactName);
- // phone
- if (hasPhone == 1) {
- this.getPhone(contactId, item);
- }
- // photo
- this.getPhoto(contactId, photoId, item);
- this.getEmail(contactId, item);
- // address
- this.getAddress(contactId, item);
- // birthdat
- this.getBirthday(contactId, item);
- // instant message
- this.getIM(contactId, item);
- // nickname
- this.getNickname(contactId, item);
- // note
- this.getNote(contactId, item);
- // org
- this.getOrg(contactId, item);
- // website
- this.getWebsite(contactId, item);
- contactList.put(item);
- }
- JSONObject data = new JSONObject();
- data.put("CONTACTS", contactList);
- data.put("TIMESTAMP", System.currentTimeMillis());
- System.out.println(data.toString());
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- }
- }
- private void getPhone (String contactId, JSONObject data) throws JSONException {
- Cursor pCur = null;
- try {
- pCur = context.getContentResolver().query(
- ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
- null,
- ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
- new String[]{contactId + ""},
- null);
- JSONArray phoneList = new JSONArray();
- while (pCur.moveToNext()) {
- int type = pCur.getInt(pCur.getColumnIndex(
- ContactsContract.CommonDataKinds.Phone.TYPE));
- String phoneType = ContactsContract.CommonDataKinds.Phone.getTypeLabel(
- context.getResources(), type, "").toString();
- String phoneNumber = pCur.getString(pCur.getColumnIndex(
- ContactsContract.CommonDataKinds.Phone.NUMBER));
- JSONObject item = new JSONObject();
- item.put("phone", phoneNumber);
- item.put("type", phoneType);
- phoneList.put(item);
- }
- data.put(KEY_PHONE, phoneList);
- } finally {
- if (pCur != null) {
- pCur.close();
- }
- }
- }
- private void getEmail (String contactId, JSONObject data) throws JSONException {
- Cursor emailCur = null;
- try {
- emailCur = context.getContentResolver().query(
- ContactsContract.CommonDataKinds.Email.CONTENT_URI,
- null,
- ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
- new String[]{contactId},
- null);
- JSONArray emailList = new JSONArray();
- while (emailCur.moveToNext()) {
- String email = emailCur.getString(emailCur.getColumnIndex(
- ContactsContract.CommonDataKinds.Email.DATA));
- int type = emailCur.getInt(emailCur.getColumnIndex(
- ContactsContract.CommonDataKinds.Email.TYPE));
- String emailType = ContactsContract.CommonDataKinds.Email.getTypeLabel(
- context.getResources(), type, "").toString();
- JSONObject item = new JSONObject();
- item.put("email", email);
- item.put("type", emailType);
- emailList.put(item);
- }
- data.put(KEY_EMAIL, emailList);
- } finally {
- if (emailCur != null) {
- emailCur.close();
- }
- }
- }
- private void getNote (String contactId, JSONObject data) throws JSONException {
- Cursor noteCur = null;
- try {
- String noteWhere =
- ContactsContract.Data.CONTACT_ID + " = ? AND " +
- ContactsContract.Data.MIMETYPE + " = ?";
- String[] noteWhereParams = new String[]{
- contactId,
- ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE};
- noteCur = context.getContentResolver().query(
- ContactsContract.Data.CONTENT_URI,
- null,
- noteWhere,
- noteWhereParams,
- null);
- if (noteCur.moveToFirst()) {
- String note = noteCur.getString(noteCur.getColumnIndex(
- ContactsContract.CommonDataKinds.Note.NOTE));
- data.put(KEY_NOTE, note);
- }
- } finally {
- if (noteCur != null) {
- noteCur.close();
- }
- }
- }
- private void getWebsite (String contactId, JSONObject data) throws JSONException {
- Cursor websiteCur = null;
- try {
- String where =
- ContactsContract.Data.CONTACT_ID + " = ? AND " +
- ContactsContract.Data.MIMETYPE + " = ?";
- String[] whereParams = new String[]{
- contactId,
- ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE};
- websiteCur = context.getContentResolver().query(
- ContactsContract.Data.CONTENT_URI,
- null,
- where,
- whereParams,
- null);
- if (websiteCur.moveToFirst()) {
- String website = websiteCur.getString(websiteCur.getColumnIndex(
- ContactsContract.CommonDataKinds.Website.URL));
- data.put(KEY_WEBSITE, website);
- }
- } finally {
- if (websiteCur != null) {
- websiteCur.close();
- }
- }
- }
- private void getIM (String contactId, JSONObject data) throws JSONException {
- Cursor imCur = null;
- try {
- String imWhere =
- ContactsContract.Data.CONTACT_ID + " = ? AND " +
- ContactsContract.Data.MIMETYPE + " = ?";
- String[] imWhereParams = new String[]{contactId,
- ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE};
- imCur = context.getContentResolver().query(
- ContactsContract.Data.CONTENT_URI,
- null,
- imWhere,
- imWhereParams,
- null);
- JSONArray imList = new JSONArray();
- while (imCur.moveToNext()) {
- String imName = imCur.getString(
- imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA));
- int type = imCur.getInt(
- imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE));
- String imType = ContactsContract.CommonDataKinds.Im.getTypeLabel(
- context.getResources(), type, "").toString();
- JSONObject item = new JSONObject();
- item.put("imName", imName);
- item.put("imType", imType);
- imList.put(item);
- }
- data.put(KEY_IM, imList);
- } finally {
- if (imCur != null) {
- imCur.close();
- }
- }
- }
- private void getOrg (String contactId, JSONObject data) throws JSONException {
- Cursor orgCur = null;
- try {
- String orgWhere =
- ContactsContract.Data.CONTACT_ID + " = ? AND " +
- ContactsContract.Data.MIMETYPE + " = ?";
- String[] orgWhereParams = new String[]{contactId,
- ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE};
- orgCur = context.getContentResolver().query(
- ContactsContract.Data.CONTENT_URI,
- null,
- orgWhere,
- orgWhereParams,
- null);
- JSONArray orgList = new JSONArray();
- while (orgCur.moveToNext()) {
- String orgName = orgCur.getString(orgCur.getColumnIndex(
- ContactsContract.CommonDataKinds.Organization.DATA));
- String title = orgCur.getString(orgCur.getColumnIndex(
- ContactsContract.CommonDataKinds.Organization.TITLE));
- JSONObject item = new JSONObject();
- item.put("orgName", orgName);
- item.put("title", title);
- orgList.put(item);
- }
- data.put(KEY_ORG, orgList);
- } finally {
- if (orgCur != null) {
- orgCur.close();
- }
- }
- }
- private void getNickname (String contactId, JSONObject data) throws JSONException {
- Cursor nicknameCur = null;
- try {
- String nicknameWhere =
- ContactsContract.Data.CONTACT_ID + " = ? AND " +
- ContactsContract.Data.MIMETYPE + " = ?";
- String[] nicknameWhereParams = new String[]{contactId,
- ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE};
- nicknameCur = context.getContentResolver().query(
- ContactsContract.Data.CONTENT_URI,
- null,
- nicknameWhere,
- nicknameWhereParams,
- null);
- while (nicknameCur.moveToNext()) {
- String nickname = nicknameCur.getString(nicknameCur.getColumnIndex(
- ContactsContract.CommonDataKinds.Nickname.NAME));
- data.put(KEY_NICKNAME, nickname);
- break;
- }
- } finally {
- if (nicknameCur != null) {
- nicknameCur.close();
- }
- }
- }
- private void getBirthday (String contactId, JSONObject data) throws JSONException {
- Cursor bCur = null;
- try {
- bCur = context.getContentResolver().query(
- ContactsContract.Data.CONTENT_URI,
- new String[] {ContactsContract.CommonDataKinds.Event.DATA },
- ContactsContract.Data.CONTACT_ID+" = "+contactId+" AND "
- +ContactsContract.Data.MIMETYPE+" = '"
- +ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE+"' AND "
- +ContactsContract.CommonDataKinds.Event.TYPE+" = "
- +ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY,
- null,
- null);
- while (bCur.moveToNext()) {
- String birthday = bCur.getString(0);
- data.put(KEY_BIRTH, birthday);
- break;
- }
- } finally {
- if (bCur != null) {
- bCur.close();
- }
- }
- }
- /**
- * Get address infomation of given contact.
- *
- * @param contactId
- * @param data
- * @throws JSONException
- */
- private void getAddress (String contactId, JSONObject data) throws JSONException {
- Cursor postals = null;
- try {
- // address
- postals = context.getContentResolver().query(
- ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
- null,
- ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = " + contactId,
- null,
- null);
- int postFormattedNdx = postals.getColumnIndex(
- ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS);
- int postTypeNdx = postals.getColumnIndex(
- ContactsContract.CommonDataKinds.StructuredPostal.TYPE);
- int postStreetNdx = postals.getColumnIndex(
- ContactsContract.CommonDataKinds.StructuredPostal.STREET);
- JSONArray addrList = new JSONArray();
- while (postals.moveToNext()) {
- String addressType = ContactsContract.CommonDataKinds.StructuredPostal
- .getTypeLabel(context.getResources(), postTypeNdx, "").toString();
- String str1 = postals.getString(postFormattedNdx);
- String str2 = postals.getString(postStreetNdx);
- JSONObject item = new JSONObject();
- item.put("addressType", addressType);
- item.put("address", str1 + str2);
- addrList.put(item);
- }
- data.put(KEY_ADDR, addrList);
- } finally {
- if (postals != null) {
- postals.close();
- }
- }
- }
- /**
- * Get the photo of given contact.
- *
- * @param cr
- * @param id
- * @param photo_id
- * @return
- */
- private void getPhoto (String contactId, long photoId, JSONObject data) throws JSONException {
- Uri uri = ContentUris.withAppendedId(
- ContactsContract.Contacts.CONTENT_URI, Long.parseLong(contactId));
- InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(
- context.getContentResolver(), uri);
- if (input != null) {
- /*Bitmap photo = BitmapFactory.decodeStream(input);
- data.put(KEY_PHOTO, photo);*/
- } else {
- Log.d(TAG, "First try failed to load photo!");
- }
- byte[] photoBytes = null;
- Uri photoUri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, photoId);
- Cursor c = context.getContentResolver().query(
- photoUri,
- new String[] {ContactsContract.CommonDataKinds.Photo.PHOTO},
- null,
- null,
- null);
- try {
- if (c.moveToFirst()) {
- photoBytes = c.getBlob(0);
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- c.close();
- }
- if (photoBytes != null) {
- /*Bitmap photo = BitmapFactory.decodeByteArray(photoBytes, 0, photoBytes.length);
- data.put(KEY_PHOTO, photo);*/
- } else {
- Log.d(TAG, "Second try also failed!");
- }
- }
- }
结果如下:
-
- {
- "TIMESTAMP": 946692989880,
- "CONTACTS": [
- {
- "id": "801",
- "phone": [
- {
- "type": "手机",
- "phone": "11122"
- },
- {
- "type": "家",
- "phone": "222111"
- }
- ],
- "org": [],
- "IM": [],
- "address": [],
- "email": [
- {
- "type": "工作",
- "email": "zhangsan@qq.com"
- }
- ],
- "name": "john"
- },
- {
- "id": "802",
- "org": [],
- "IM": [],
- "address": [],
- "email": [],
- "name": "jack"
- },
- {
- "id": "803",
- "phone": [
- {
- "type": "手机",
- "phone": "1300070302533"
- }
- ],
- "org": [],
- "IM": [],
- "address": [],
- "email": [],
- "name": "alex"
- },
- {
- "id": "1064",
- "birthday": "2000-01-06",
- "phone": [
- {
- "type": "手机",
- "phone": "18811112222"
- },
- {
- "type": "家",
- "phone": "18811113333"
- },
- {
- "type": "工作",
- "phone": "18811114444"
- }
- ],
- "IM": [
- {
- "imName": "12345678",
- "imType": "其他"
- },
- {
- "imName": "13245678",
- "imType": "其他"
- }
- ],
- "website": "www.baidu.com",
- "nickname": "nickname",
- "address": [
- {
- "address": "百度市谷歌西路10086号",
- "addressType": "自定义"
- }
- ],
- "email": [
- {
- "type": "工作",
- "email": "office@xxx.com"
- },
- {
- "type": "住宅",
- "email": "home@xxx.com"
- }
- ],
- "name": "小强",
- "org": [
- {
- "orgName": "三月",
- "title": "攻城狮"
- }
- ],
- "note": "comment for test"
- }
- ]
- }