Не удается прочитать номер телефона из запроса контент-провайдера
Я использовал начальную активность с намерением выбрать контакт и получить данные из метода.
onActivityResult
метод устарел и должен использовать
registerForActivityResult
решение.
До:
val intent = Intent(Intent.ACTION_PICK).apply {
type = ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE
}
startActivityForResult(intent, SELECT_PHONE_NUMBER)
if (requestCode == SELECT_PHONE_NUMBER && resultCode == RESULT_OK) {
// Get the URI and query the content provider for the phone number
val contactUri = data!!.data
val projection = arrayOf(ContactsContract.CommonDataKinds.Phone.NUMBER)
val cursor = context?.contentResolver?.query(
contactUri ?: Uri.EMPTY, projection,
null, null, null
);
// If the cursor returned is valid, get the phone number
if (cursor != null && cursor.moveToFirst()) {
val numberIndex =
cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)
var number = cursor.getString(numberIndex) // ->> this is phone Number String
}
cursor?.close()
}
Когда я использую
registerForActivityResult(ActivityResultContracts.PickContact())
Я не могу получить доступ к номеру телефона, не могу запросить DataProvider с помощью
ContactsContract.CommonDataKinds.Phone.NUMBER
или же
ContactsContract.PhoneLookup.NUMBER
Я получаю исключение:
java.lang.IllegalArgumentException: недопустимые данные столбца1
или (при использовании CommonDataKinds.Phone.NUMBER)
java.lang.IllegalArgumentException: неверный номер столбца
(при использовании PhoneLookup.NUMBER)