Android技术知识Android开发Android开发经验谈

Android快速查询通讯录联系人

2021-05-27  本文已影响0人  敲robot的代码

前言

    /**
     * 查询联系人数据
     * @param context Context
     * @return JSONArray
     */
    fun queryContactData(context: Context): JSONArray {
        val jsonArray = JSONArray()
        val cursorContacts = context.contentResolver.query(
            ContactsContract.Contacts.CONTENT_URI,
            arrayOf(ContactsContract.Contacts._ID),
            null,
            null,
            null
        )
        cursorContacts?.run {
            while (moveToNext()) {
                val id =
                    cursorContacts.getStringOrNull(getColumnIndex(ContactsContract.Contacts._ID))
                val cursorData = context.contentResolver.query(
                    ContactsContract.Data.CONTENT_URI,
                    null,
                    ContactsContract.Data.CONTACT_ID + " = ?",
                    arrayOf(id),
                    null
                )
                cursorData?.run {
                    //联系人名字
                    val name = JSONObject()
                    //联系人下的电话
                    val phoneArray = JSONArray()

                    while (moveToNext()) {
                        when (cursorData.getStringOrNull(getColumnIndex(ContactsContract.Data.MIMETYPE))) {
                            //添加名字
                            ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE -> {
                                name.apply {
                                    put(
                                        "display_name",
                                        cursorData.getStringOrNull(
                                            getColumnIndex(
                                                ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME
                                            )
                                        )
                                    )
                                    put(
                                        "given_name",
                                        cursorData.getStringOrNull(
                                            getColumnIndex(
                                                ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME
                                            )
                                        )
                                    )
                                    put(
                                        "family_name",
                                        cursorData.getStringOrNull(
                                            getColumnIndex(
                                                ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME
                                            )
                                        )
                                    )
                                    put(
                                        "prefix",
                                        cursorData.getStringOrNull(
                                            getColumnIndex(
                                                ContactsContract.CommonDataKinds.StructuredName.PREFIX
                                            )
                                        )
                                    )
                                    put(
                                        "middle_name",
                                        cursorData.getStringOrNull(
                                            getColumnIndex(
                                                ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME
                                            )
                                        )
                                    )
                                    put(
                                        "suffix",
                                        cursorData.getStringOrNull(
                                            getColumnIndex(
                                                ContactsContract.CommonDataKinds.StructuredName.SUFFIX
                                            )
                                        )
                                    )
                                }
                            }
                            //添加电话
                            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE -> {
                                JSONObject().apply {
                                    put(
                                        "number",
                                        cursorData.getStringOrNull(getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
                                    )
                                    put(
                                        "type",
                                        cursorData.getIntOrNull(getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE))
                                    )
                                    phoneArray.put(this)
                                }
                            }
                            //TODO("获取联系人其他详情数据")
                        }

                    }
                    close()
                }
            }
            close()
        }
        JSONObject().apply {
            put("name", name)
            put("phone", phoneArray)
            jsonArray.put(this)
        }
        return jsonArray
    }

正文

    /**
     * 查询联系人数据
     * @param context Context
     */
    fun queryContactData(context: Context) {
        val cursorData = context.contentResolver.query(
            ContactsContract.Data.CONTENT_URI,
            null,
            null,
            null,
            null
        )
        cursorData?.run {
            while (moveToNext()) {
                cursorData
                TODO("获取联系人详情数据")

            }
            close()
        }
    }

以下是完整代码

    private var name: JSONObject? = null
    private var phoneArray: JSONArray? = null

    /**
     * 查询联系人数据
     * @param context Context
     */
    fun queryContactData(context: Context): JSONArray {
        val jsonArray = JSONArray()
        //记录raw_contact_id
        var rawContactIdOld = ""
        val cursorData = context.contentResolver.query(
            ContactsContract.Data.CONTENT_URI,
            arrayOf(
                ContactsContract.Data.RAW_CONTACT_ID,
                ContactsContract.Data.MIMETYPE,
                ContactsContract.Data.DATA1,
                ContactsContract.Data.DATA2,
                ContactsContract.Data.DATA3,
                ContactsContract.Data.DATA4,
                ContactsContract.Data.DATA5,
                ContactsContract.Data.DATA6,
                ContactsContract.CommonDataKinds.Photo.PHOTO
            ),
            null,
            null,
            "${ContactsContract.Data.RAW_CONTACT_ID} ASC"//按raw_contact_id升序排序
        )
        cursorData?.run {
            while (moveToNext()) {
                //获取当前的联系人raw_contact_id
                val rawContactId =
                    cursorData.getStringOrNull(getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID))
                        ?: ""

                if (rawContactId != rawContactIdOld) {//判断当前的和上一次的raw_contact_id是否一样,不一样说明不是同一个联系人数据
                    if (rawContactIdOld.isNotEmpty()) {
                        //添加联系人到数据中
                        addContactJSONArray(jsonArray)
                    }

                    name = JSONObject()
                    phoneArray = JSONArray()

                    rawContactIdOld = rawContactId
                }
                when (cursorData.getStringOrNull(getColumnIndex(ContactsContract.Data.MIMETYPE))) {
                    //添加名字
                    ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE -> {
                        tryCatch {
                            name?.apply {
                                put(
                                    "display_name",
                                    cursorData.getStringOrNull(getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME))
                                )
                                put(
                                    "given_name",
                                    cursorData.getStringOrNull(getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME))
                                )
                                put(
                                    "family_name",
                                    cursorData.getStringOrNull(getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME))
                                )
                                put(
                                    "prefix",
                                    cursorData.getStringOrNull(getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.PREFIX))
                                )
                                put(
                                    "middle_name",
                                    cursorData.getStringOrNull(getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME))
                                )
                                put(
                                    "suffix",
                                    cursorData.getStringOrNull(getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.SUFFIX))
                                )
                            }
                        }
                    }
                    //添加电话号码
                    ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE -> {
                        tryCatch {
                            JSONObject().apply {
                                put(
                                    "number",
                                    cursorData.getStringOrNull(getColumnIndex(ContactsContract.Data.DATA1))
                                )
                                put(
                                    "type",
                                    cursorData.getIntOrNull(getColumnIndex(ContactsContract.Data.DATA2))
                                )
                                phoneArray?.put(this)
                            }
                        }
                    }
                }
                if (cursorData.isLast) {
                    //添加联系人到数据中
                    addContactJSONArray(jsonArray)
                }
            }
            close()
        }
        return jsonArray
    }

    /**
     * 添加联系人到数据中
     * @param jsonArray JSONArray
     */
    private fun addContactJSONArray(jsonArray: JSONArray) {
        JSONObject().apply {
            put("name", name)
            put("phone", phoneArray)
            jsonArray.put(this)
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读