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);                                // email                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"        }    ]}


更多相关文章

  1. android 查看手机运行的进程列表
  2. android打开网页,使用手机浏览器
  3. android 重力感应手机方向
  4. android获取通讯录所有电话
  5. Android(安卓)Studio2.1.3之后在小米手机安装应用报错
  6. Ubuntu下Android(安卓)Studio在真机测试时Choose Device全是乱码
  7. 浅析Android手机卫士关闭自动更新
  8. android 判断手机为小米
  9. Android(安卓)安卓WebView套壳H5网页 手机返回键问题(过滤二级页

随机推荐

  1. android存储方式(转)
  2. Android根据屏幕宽度,按比例缩放图片
  3. 查看Android(安卓)ADT Plugin版本的方法
  4. android中短信协议与字段
  5. android 数据库 sqlite 操作
  6. android 定时一段时间执行
  7. 记一次Android(安卓)Studio的Enable VT-x
  8. 下拉刷新SwipeRefreshLayout源码
  9. [置顶] Android大数据读取与折半查找(初步
  10. ListView的行中加了按钮的注意事项