无法从手机联系人获取联系地址

问题描述 投票:0回答:1

我试图从电话联系人那里获取地址,但没有成功,我能够获取姓名、电话号码和电子邮件,但无法获取地址。调试时,StructuredPostal 的光标看起来与电话号码的光标相同。我在清单中设置了“android.permission.READ_CONTACTS”,因此获得了其他信息。 这是我正在使用的代码:

val launcher = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.PickContact(),
        onResult = {
            val contentResolver: ContentResolver = ctx.contentResolver

            val cursor: Cursor? = contentResolver.query(
                it!!,
                null,
                null,
                null,
                null)
            if (cursor != null) {
                if (cursor.moveToFirst()) {
                    changed = true
                    clientUiState.clientDetails.clientname =
                        cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))
                    Log.d("Name", clientUiState.clientDetails.clientname)
                    val id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))
                    val postal: Cursor? = contentResolver.query(
                        StructuredPostal.CONTENT_URI,
                        null,
                        StructuredPostal.FORMATTED_ADDRESS + " = " + id,
                        null,
                        null
                    )
                    if (postal != null) {
                        while (postal.moveToFirst()) {
                            clientUiState.clientDetails.clientAddress =
                                postal.getString(postal.getColumnIndex(StructuredPostal.FORMATTED_ADDRESS))
                            Log.d("Address", clientUiState.clientDetails.clientAddress)
                        }
                        postal.close()
                    }
                    val phones: Cursor? = contentResolver.query(
                        Phone.CONTENT_URI,
                        null,
                        Phone.CONTACT_ID + " = " + id,
                        null,
                        null
                    )

                    if (phones != null) {
                        while (phones.moveToNext()) {
                            clientUiState.clientDetails.clientPhone =
                                phones.getString(phones.getColumnIndex(Phone.NUMBER))
                            Log.d("Number", clientUiState.clientDetails.clientPhone)
                        }
                        phones.close()
                    }

                    val email: Cursor? = contentResolver.query(
                        Email.CONTENT_URI,
                        null,
                        Email.CONTACT_ID + " = ?",
                        arrayOf(id),
                        null
                    )
                    if (email != null) {
                        while (email.moveToNext()) {
                            clientUiState.clientDetails.clientEmail =
                                email.getString(email.getColumnIndex(Email.DATA))
                            Log.d("Email", clientUiState.clientDetails.clientEmail)
                        }
                        email.close()
                    }
                   
                }
            }

        }
    )

还尝试了 ActivityResultContracts.StartActivityForResult(),但结果相同。我仍然是一个菜鸟,所以可能错过了一些基本的东西,或者吠叫了完全错误的树,并且无法在网络上的其他地方找到答案。

android android-contacts
1个回答
0
投票

我终于在一篇旧的(2012)帖子中找到了这个问题的答案https://stackoverflow.com/a/13471370/22445779

if (postal != null) {
                        if (postal.count == 0) clientUiState.clientDetails.clientAddress = ""
                        while (postal.moveToNext()) {
                            val Strt = postal.getString(
                                postal.getColumnIndex(StructuredPostal.STREET)
                            )
                            val Cty = postal.getString(
                                postal.getColumnIndex(StructuredPostal.CITY)
                            )
                            val cntry = postal.getString(
                                postal.getColumnIndex(StructuredPostal.COUNTRY)
                            )
                            clientUiState.clientDetails.clientAddress = Strt + Cty + cntry
                        }
                        postal.close()
                    }
© www.soinside.com 2019 - 2024. All rights reserved.