# Implement Android 17's Contact Picker

DevFeed: [Implement Android 17's Contact Picker](<https://devfeed.tech/articles/ditch-read-contacts-forever-android-17-s-secure-contact-picker-25981.md>)

Original publisher: [Read original article](<https://proandroiddev.com/ditch-read-contacts-forever-android-17s-secure-contact-picker-24c5c69b3b51?source=rss-711ab22c5c77------2>)

Author: Nav Singh

Published: 2026-06-07T19:28:49Z

Content type: tutorial

Language: en

Sources: [Stories by Nav Singh 🇨🇦 on Medium](<https://devfeed.tech/sources/stories-by-nav-singh-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [implementation](<https://devfeed.tech/topics/implementation.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android17](<https://devfeed.tech/tags/android17.md>), [androidappdevelopment-usa](<https://devfeed.tech/tags/androidappdevelopment-usa.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [contactpicker](<https://devfeed.tech/tags/contactpicker.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [permission](<https://devfeed.tech/tags/permission.md>), [privacy](<https://devfeed.tech/tags/privacy.md>)

## AI overview

A tutorial on implementing Android 17's Contact Picker as a privacy-preserving alternative to READ_CONTACTS. It covers requesting contact data fields, launching the picker, handling result URIs, multi-selection, and compatibility behavior.

## Source excerpt

Image generated using Perplexity In this article, we will learn how to implement the new Contact Picker introduced in Android17. Contact picker | Android Developers Contact picker -- Android17 It is a standardized, browsable interface for sharing contacts. A privacy-preserving alternative to the READ_CONTACTS permission, the picker runs on Android 17 and higher. 🪦 READ_CONTACTS Permission 🪦 It grants apps full, persistent access to all contact data -- names, phone numbers, emails, etc -- after a one-time user approval (runtime permission). Protection level: dangerous ⛔ Apps specify which data fields they need, such as phone numbers or email addresses, and users select specific contacts to share. With built-in search, profile switching, and multi-selection capabilities, the app reads only the selected data, ensuring granular control. Implementation Intent Action: ACTION_PICK_CONTACTS We will be able to specify multiple data fields our app will need at once. We do this using Intent.EXTRA_REQUESTED_DATA_FIELDS, passing an ArrayList<String> of MIME types defined in ContactsContract.CommonDataKinds. MIME Types: //... ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE //...Define the ActivityResultLauncherval contactPickerLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.StartActivityForResult() ) { result -> if (result.resultCode == Activity.RESULT_OK) { val uri = result.data?.data ?: return@rememberLauncherForActivityResult // Process the result URI.... processCPResultUri(uri, context) } }Launch the ContactPicker 📲 Define the intent val requestedFields = arrayListOf( ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE ) // Set up the intent val pickContactIntent = Intent(ContactsPickerSessionContract.ACTION_PICK_CONTACTS).apply { // Enable multi-select - true/false putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true) // Set limit of selectable contacts putExtra(EXTRA_PICK_CONTACTS_SE