Hello, I trying to get a phone number of iOS contacts library. On iOS usually I getter with
let contact = getContact(with value: “filter…”)
contact.phoneNumbers.first?.value.stringValue
func contacts(value: String) → CNContact {…}
on Android I cannot get the value.stringValue and I don’t see any other property to map this value.
Hello @guillodacosta!
Please clarify, what exactly you are trying to do?
Also, I got to mention that Android NDK has no access to the contacts, so maybe you are talking about a Multiplatform library, not a native one?
Thanks @Artyom.Degtyarev,
I fix the message first, is not on Android what I try to access to value.stringValue
instead of I should have said “on shared layer (iOS implementation through kotlin) of my multiplatform project”.
Second I trying to get iOS phone contacts using the class CNContact
of platform.Contacts.*
. For access to a phone on iOS (swift) usually I use the value
property (type: CNPhoneNumber
) of each one contact (type: CNLabeledValue<CNPhoneNumber>
) and next I use the stringValue
property thats has the phone number value that I need.
But in kotlin (shared layer of my iOS implementation) using the respective library given for kotlin I cannot access to value property or another one that map my phone number value searched.
Instead of that, kotlin is given to me a string that I don’t know how manage.
I made this for know, while you people lets my know how to do better.
val phonePosition = this.indexOf("stringValue=") + 12
val lastPhonePosition = phonePosition + 14
return this.substring(phonePosition, lastPhonePosition).replace("\\D+","")
where this
is my phoneNumber
value (which should not be like that)
And I believe that I did post this with a bad category, but I don’t know how update. Must be
#multiplatform.
Or I continue confuse with that is native
and what is multiplatform

If you want to get phone number the same way as one can do in the Swift code, you can do it like this:
val contact: CNContact = CNContact()
val labeledValue: CNLabeledValue = contact.phoneNumbers()[0] as CNLabeledValue
val phoneNumber: CNPhoneNumber = labeledValue.value as CNPhoneNumber
val number: String = phoneNumber.stringValue()
This piece of code is incorrect as far as I do not initialize contact correctly, but the idea is to cast elements of the List, received from the phoneNumbers() function.
Also, to make it more clear with the native-multiplatform confusion. When we are talking about producing binaries from the Kotlin code - it is Kotlin/Native. And when we are sharing the common code between different products (JVM bytecode, binary files, JavaScript code) - it is Kotlin/Multiplatform.
1 Like