Android 11. ContentResolver.query возвращает пустой курсор

Я реализовал выбор контактов из телефонной книги в своем приложении. Чтобы интент с действием PICK работал на android 11, я добавил это в свой манифест:

  <queries>
  <intent>
            <action android:name="android.intent.action.PICK" />
            <data android:mimeType="vnd.android.cursor.dir/phone_v2" />
        </intent>
</queries>

Код отлично работает на версиях Android 10 и ниже. Но на версии Android 11 контакт, который я выбрал из телефонной книги, не вставляется в текстовое поле моего приложения, потому что ContentResolver.query возвращает пустой курсор. it.moveToFirst() возвращает false Вот мой код:

  Constants.START_PICK_CONTACT_ACTION -> {
                data?.data?.let { uri ->
                    activity.contentResolver.query(uri, null, null, null, null)?.use {
                                if (it.moveToFirst()) {
                                    val number: String? = it.getString(it.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
                                        etPhoneNumber.setText(number)
                                    }
                                }
                            }
            }

Помогите мне, пожалуйста.


person testovtest    schedule 29.09.2020    source источник
comment
Вам не нужен <queries> для этого кода, хотя вы можете использовать какой-то другой код. Под пустым курсором вы подразумеваете, что это допустимый Cursor, но не имеет строк (поэтому it.moveToFirst() возвращает false)?   -  person CommonsWare    schedule 29.09.2020
comment
@CommonsWare, без «запросов» queryIntentActivities возвращает значение null. Да, it.moveToFirst() возвращает false   -  person testovtest    schedule 29.09.2020
comment
Без ‹queries› queryIntentActivities возвращает null - согласен, но этот код не входит в ваш вопрос. В вызове query() попробуйте указать нужную проекцию (2-й параметр) вместо передачи null и посмотрите, поможет ли это.   -  person CommonsWare    schedule 29.09.2020
comment
@CommonsWare, курсор все еще пустой(   -  person testovtest    schedule 29.09.2020
comment
@testovtest Вам удалось решить эту проблему?   -  person Much Overflow    schedule 09.02.2021


Ответы (1)


У меня была аналогичная проблема. Необходимо предоставить разрешение android.Manifest.permission.READ_CONTACTS перед попыткой вызова запроса

person Eugene G.    schedule 07.10.2020