Android获取联系人信息[名字,手机,电话,公司名称,昵称]

本文介绍了一种在Android中获取联系人信息的方法,包括姓名、手机号码、电话号码、公司名称和昵称等,并展示了如何将这些信息转换为JSON格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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"

    }

]


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值