电话号码搜索查询无法在 Android 内容提供程序中获取带有国家/地区代码的号码

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

在我的应用程序中,我想实现一个功能,我可以提供一个电话号码,它会使用内容提供商提供保存在我的手机中的该特定号码的所有信息。这是我尝试过的代码。它部分满足了我想要的。

ContactRepository.kt

interface ContactRepository {
    suspend fun getContacts(mobileNumbers: List<String?>): Result<List<Contact>>
}

ContactRepositoryImpl.kt

class ContactRepositoryImpl @Inject constructor(
    @ApplicationContext private val context: Context
) : ContactRepository {


    override suspend fun getContacts(mobileNumbers: List<String?>): Result<List<Contact>> {
        val contactList = mutableListOf<Contact>()

        return runCatching {
            val contentResolver = context.contentResolver

            val uri = Phone.CONTENT_URI
            val projection = arrayOf(
                Phone.NUMBER,
                Phone.DISPLAY_NAME,
                Phone.PHOTO_URI
            )
            val selection = "${Phone.NUMBER} IN (${mobileNumbers.joinToString(",") { "?" }})"
            val selectionArgs = mobileNumbers.filterNotNull().toTypedArray()

            // SELECT `projection` FROM `uri` WHERE `selection` = `selectionArgs`
            val cursor = contentResolver.query(uri, projection, selection, selectionArgs, null)

            cursor?.use {
                val phoneNumberIndex = it.getColumnIndex(Phone.NUMBER)
                val nameIndex = it.getColumnIndex(Phone.DISPLAY_NAME)
                val photoUriIndex = it.getColumnIndex(Phone.PHOTO_URI)

                while (it.moveToNext()) {
                    val number = it.getString(phoneNumberIndex)
                    val name = it.getString(nameIndex)
                    val photoUri = it.getString(photoUriIndex)

                    println("Value -> $number : $name : $photoUri")

                    contactList.add(
                        Contact(
                            name = name,
                            number = number,
                            photoUri = photoUri
                        )
                    )
                }
            }

            contactList
        }
    }

}

但是当我在输入中输入一个号码(即(01866985338))并且该号码与国家/地区代码(即(+880186698 或 +880 1866-98))一起保存在我的手机中时,就会出现问题。 这就是为什么,虽然两者是相同的数字,但根据我的“选择”的不匹配, 它没有得到那个。我该如何解决这个问题。

记住,输入可以是字符串列表或单个字符串

android android-contentprovider
1个回答
0
投票

为了防止出现此问题,请使用

PhoneNumberUtils.normalizeNumber(it)
标准化列表中的每个电话号码。此方法会删除不可拨号的字符(例如空格和连字符)并将号码转换为标准化格式。

© www.soinside.com 2019 - 2024. All rights reserved.