Cursor object returning 0 rows after trying to query for phone number
07:06 07 Dec 2025

I'm trying to access the phone number from ContactsContract.CommonDataKinds.Phone.NUMBER after getting the contact ID and I'm getting 0 rows. Not too sure if I'm handling the runtime permission well hence why I cannot access the phone number.

callSuspect.setOnClickListener {
                requestPermission()
            }
private fun requestPermission(){
        when{
            ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED -> {
                if(phoneNumberUri == null){
                    Toast.makeText(requireContext(),"Select a suspect", Toast.LENGTH_SHORT ).show()
                }
                else{
                    parseSuspectsNumber(phoneNumberUri!!)
                }
            }
            else ->{
                    requestPermissionLauncher.launch(Manifest.permission.READ_CONTACTS)
            }
        }
    }

private fun parseSuspectsNumber(contactUri: Uri){
        val queryFields = arrayOf(ContactsContract.Contacts._ID)
        val queryCursor = requireActivity().contentResolver.query(contactUri, queryFields, null, null, null)
        var suspectId: String? = null
        queryCursor?.use{ cursor ->
            if(cursor.moveToFirst()){
                suspectId = cursor.getString(0)
            }
        }
        val queryFieldsNumber = arrayOf(ContactsContract.CommonDataKinds.Phone.NUMBER)
        val phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI
        val phoneWhereClause = "${ContactsContract.CommonDataKinds.Phone._ID} = ?"
        val queryCursorNumber = requireActivity().contentResolver.query(phoneUri, queryFieldsNumber, phoneWhereClause, arrayOf(suspectId), null)
        queryCursorNumber?.use{ cursor ->
            if(cursor.moveToFirst()){
                val phoneNumber = cursor.getString(0)
                val dialNumber = Intent(Intent.ACTION_DIAL).apply{
                    data = Uri.parse("tel:$phoneNumber")
                }
                startActivity(dialNumber)
            }
        }
    }
android kotlin