• Home
  • Insight
  • Blog
  • Business
  • Entertainment
  • Health
  • Politics
  • Shop
    • Gift Shop
    • Value Shop
    • Store
    • Bargain Shop
    • Discount
  • Sports
  • Tech
  • Travel
  • USA
  • Video
  • World
    • Asia
    • Africa
    • South America
    • North America
    • Europe
    • Oceania
Monday, October 26, 2026
No Result
View All Result
Subscribe Now
  • Home
  • Insight
  • Blog
  • Business
  • Entertainment
  • Health
  • Politics
  • Shop
    • Gift Shop
    • Value Shop
    • Store
    • Bargain Shop
    • Discount
  • Sports
  • Tech
  • Travel
  • USA

    Obama warns of division as Trump attacks Muslim Senate candidate

    At least 12 people injured in shooting near a football stadium in Florida

    RFK Jr. Announces ‘Made in the USA’ Label to Help American Fishermen and Protect U.S. Consumers

    Lakers honor former forward with tribute video during return

    Clash between Inglewood and SoFi Stadium operators hits ballot

    Tom Skerritt, who starred in ‘Picket Fences,’ ‘Alien’ and ‘Top Gun’ has died : NPR

    Kansas Senate rivals clash over Trump, party loyalty in heated debate

    Is Rabies Making a Comeback?

    Kohen Wiley’s Family Says Investigators Didn’t Contact Them Before Concluding Cops Did No Wrong

  • Video
  • World
    • Asia
    • Africa
    • South America
    • North America
    • Europe
    • Oceania
The Insight Post
  • Home
  • Insight
  • Blog
  • Business
  • Entertainment
  • Health
  • Politics
  • Shop
    • Gift Shop
    • Value Shop
    • Store
    • Bargain Shop
    • Discount
  • Sports
  • Tech
  • Travel
  • USA

    Obama warns of division as Trump attacks Muslim Senate candidate

    At least 12 people injured in shooting near a football stadium in Florida

    RFK Jr. Announces ‘Made in the USA’ Label to Help American Fishermen and Protect U.S. Consumers

    Lakers honor former forward with tribute video during return

    Clash between Inglewood and SoFi Stadium operators hits ballot

    Tom Skerritt, who starred in ‘Picket Fences,’ ‘Alien’ and ‘Top Gun’ has died : NPR

    Kansas Senate rivals clash over Trump, party loyalty in heated debate

    Is Rabies Making a Comeback?

    Kohen Wiley’s Family Says Investigators Didn’t Contact Them Before Concluding Cops Did No Wrong

  • Video
  • World
    • Asia
    • Africa
    • South America
    • North America
    • Europe
    • Oceania
No Result
View All Result
No Result
View All Result
Home Mobile

A more reliable way to add and edit contacts on Android  |  Android Developers’ Blog

by Theinsightpost
October 24, 2026
in Mobile
0 0
0

What’s changing

Apps that target the upcoming Android release will no longer be able to directly write to contacts with the WRITE_CONTACTS permission. Instead, you can use the standard contact intents (ACTION_INSERT, ACTION_EDIT, and ACTION_INSERT_OR_EDIT). For a complete reference implementation, see the developer guide on how to modify contacts using intents. 

On devices running the upcoming Android release, these three contact intents will behave consistently and need no permission at all. If your app targets the upcoming Android release or later and attempts to write to contacts directly, those writes will be rejected and result in a SecurityException or permission denial. For the small set of apps which require broad access to create and modify contacts, a new special app access permission, MANAGE_CONTACTS, arrives in Android 17 QPR2 (Q4 2026). Google Play is publishing updated guidelines for contact access, including MANAGE_CONTACTS, today.

Why we’re doing this

Currently, if your app needs to save even one contact, you might be requesting WRITE_CONTACTS. But that permission grants broad access, allowing an app to make widespread changes to contacts across the device in the background, even without user interaction. Most apps don’t need such broad permission.

While alternatives exist, we’ve heard from you that they need to be more standardized across the ecosystem. Previously, the contact intents behaved differently from one device to the next. Some editors dropped the data you passed in, like a contact photo. On some devices, the back button saved the contact without the user meaning to or the “create new contact” option was hard to find. So asking for permission was the rational choice. We’re fixing all these issues in the upcoming Android version and requiring devices running it to follow the same standards.

What to use instead

Add or edit a contact: use the contact intents

When you use these intents – ACTION_INSERT, ACTION_EDIT, and ACTION_INSERT_OR_EDIT – the system handles the heavy lifting by presenting a clean,  standardized contact editor experience. It opens a quick half-sheet form for new entries, or allows the user to easily search and add information to an existing contact. Users can seamlessly expand this into a full-page editor to fill out more details, all without your app ever needing direct write permissions. View the tentative UX mocks below: 

Figure 1: Create a New Contact  *UX not Final*

Figure 2: Add Info to an Existing Contact *UX not Final*


Note: Different device manufacturers may modify the user experience to match their OS style but the behaviour will remain consistent.


You can further streamline the creation process by passing optional data payloads, known as Extras, alongside your intent:

  • EXTRA_ACCOUNT suggests which account the contact saves to, which helps if your app syncs contacts. This extra already existed, but support varied by device. Starting in the upcoming Android release, support is standardized across devices.
  • EXTRA_PHOTO_URI passes a photo to pre-fill the contact picture. The editor handles the URI read permission for you. This is new with the upcoming Android release and will be supported across the ecosystem.

Before: writing directly with WRITE_CONTACTS (Results in a SecurityException or permission denial once your app targets the upcoming Android release.)

 

// Requires android.permission.WRITE_CONTACTS
fun saveContactDirectly(context: Context, name: String, phone: String, account: Account) {
    val ops = arrayListOf(
        ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, account.type)
            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, account.name)
            .build(),
        ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
            .withValue(
                ContactsContract.Data.MIMETYPE,
                ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE
            )
            .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)
            .build(),
        ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
            .withValue(
                ContactsContract.Data.MIMETYPE,
                ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
            )
            .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
            .build()
    )
    context.contentResolver.applyBatch(ContactsContract.AUTHORITY, ops)
}

 

 

After: opening the contact editor (No permission needed.)

 

fun saveContactWithEditor(
    context: Context,
    name: String,
    phone: String,
    account: Account,
    photoUri: Uri
) {
    val intent = Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI).apply {
        putExtra(ContactsContract.Intents.Insert.NAME, name)
        putExtra(ContactsContract.Intents.Insert.PHONE, phone)
        // Suggest which account the contact is saved to
        putExtra(ContactsContract.Intents.Insert.EXTRA_ACCOUNT, account)
        // New in the upcoming Android release: pre-fill the contact photo
        putExtra(ContactsContract.Intents.Insert.EXTRA_PHOTO_URI, photoUri)
        clipData = ClipData.newRawUri("", photoUri)
        addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    }
    context.startActivity(intent)
}

 

Before: updating an existing contact directly

 

// Requires android.permission.WRITE_CONTACTS
fun addPhoneDirectly(context: Context, rawContactId: Long, phone: String) {
    val values = ContentValues().apply {
        put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
        put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
        put(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
    }
    context.contentResolver.insert(ContactsContract.Data.CONTENT_URI, values)
}

After: letting the user choose a contact to update, or create a new one

fun addPhoneWithEditor(context: Context, phone: String) {
    val intent = Intent(Intent.ACTION_INSERT_OR_EDIT).apply {
        type = ContactsContract.Contacts.CONTENT_ITEM_TYPE
        putExtra(ContactsContract.Intents.Insert.PHONE, phone)
    }
    context.startActivity(intent)
}

If you already know which contact to update, use ACTION_EDIT with that contact’s URI:

fun editKnownContact(context: Context, contactUri: Uri, phone: String) {
    val intent = Intent(Intent.ACTION_EDIT, contactUri).apply {
        putExtra(ContactsContract.Intents.Insert.PHONE, phone)
    }
    context.startActivity(intent)
}

 

Pick a contact: use the Contact Picker

If you only need to read contacts the user chooses, use the Contact Picker, available since Android 17. It needs no permission.

Calling and messaging apps: use People Directory

Some apps add “Call with…” or “Message with…” actions to contacts so people can start a call or chat from the Phone or Contacts app. If your app does this today by writing extra entries into the user’s contacts, move to People Directory, arriving in Android QPR2 (Q4 2026). It’s a new system directory where your app publishes how people can reach each other in your app, without editing the user’s contacts.

Examples of how apps can migrate

To see how these alternatives work in practice, here are a few examples of how different types of apps can approach contact access:

Example app type (non-exclusive). Recommended migration path
Social, P2P Payment, & Ride-Sharing Apps If your app lets users find friends, split a bill, or share a trip status, you don’t need contact permissions at all. Use the Contact Picker for one-time contact selection, and launch ACTION_INSERT with EXTRA_PHOTO_URI when a user taps “Save to Contacts” on a profile.
Business Card Scanners & Event Networking Apps If your app scans a badge or QR code and saves a new contact – or adds a work phone number to an existing colleague’s entry – use ACTION_INSERT or ACTION_INSERT_OR_EDIT. The standardized half-sheet editor pre-fills the parsed fields (name, company, phone, email, and photo) so the user can verify and save in one tap without granting background permissions.
VoIP Calling & Messaging Apps Rather than requesting WRITE_CONTACTS to inject custom “Call with…” or “Message with…” rows into the user’s address book, publish reachability metadata through People Directory and use ACTION_INSERT when users add a new contact from a chat thread.
Enterprise CRM & Cloud Sync Apps If your app performs continuous, two-way background contact synchronization with a cloud or enterprise account – where prompting the user with an intent UI for every record isn’t feasible – your app qualifies to declare MANAGE_CONTACTS 

Changes to check for

  • Custom data types aren’t supported in the editor. If you pass Insert.DATA rows with MIME types other than the standard ContactsContract.CommonDataKinds types, those MIME types will be silently ignored by the editor.
  • SHOW_OR_CREATE_CONTACT isn’t handled by the system editor. Contacts apps that come with the device can still handle it. For consistent behavior across devices, use ACTION_INSERT_OR_EDIT.
  • Writes fail by default. Once you target the upcoming Android release, any direct write without MANAGE_CONTACTS results in a SecurityException or permission denial. Test for it.

Do I need MANAGE_CONTACTS?

Probably not. If your app saves or edits contacts because a user asked it to, the intents above cover you, with no permission and no Play Console declaration.

MANAGE_CONTACTS is for apps whose core purpose is managing contacts, where the intents aren’t enough. For example:

Your app… Need MANAGE_CONTACTS?
Saves a contact from a chat, business card, or order. No, use ACTION_INSERT
Adds a number or email to an existing contact. No, use ACTION_INSERT_OR_EDIT or ACTION_EDIT
Lets users pick contacts to invite, share with, or pay. No, use the Contact Picker
Adds call or message actions to contacts. No, use People Directory
Has its own branded contact editing screen. No, a custom interface alone doesn’t qualify
Is a dedicated contact manager or dialer replacement app. Likely yes
Is a caller ID & spam protection app that mass-updates address book entries. Likely yes
Syncs contacts with an enterprise or cloud account in the background. Likely yes
Performs bulk contact backup/restore or device-to-device phone transfer. Likely yes
Sets custom ringtones for individual contacts. Likely yes

How it works:

  • MANAGE_CONTACTS is a special app access permission. It isn’t a runtime dialog. Users turn it on under Settings > Special app access > Manage contacts.

// Opens Settings > Apps > Special app access > Manage contacts
val intent = Intent(Settings.ACTION_MANAGE_CONTACTS, Uri.fromParts("package", packageName, null))
context.startActivity(intent)

  • It covers reading, adding, editing, and deleting contacts, accounts and People Directory data. You don’t need to request READ_CONTACTS as well.
  • To publish on Google Play with MANAGE_CONTACTS, you submit a declaration in Play Console explaining why the intents aren’t enough for your app’s core functionality.

Migration steps

  • Find your contact writes. Search your code for WRITE_CONTACTS, ContactsContract.RawContacts.CONTENT_URI, ContactsContract.Data.CONTENT_URI, and applyBatch(ContactsContract.AUTHORITY, …).
  • Replace each user-driven write with an intent: ACTION_INSERT for new contacts, and ACTION_EDIT or ACTION_INSERT_OR_EDIT for updates.
  • Use only standard data types in Insert.DATA. Move call or message actions to People Directory.
  • Decide whether you truly need MANAGE_CONTACTS using the table above. If you do, plan your Play Console declaration.
  • Remove WRITE_CONTACTS from your manifest once no code path needs it.

Timeline

When What happens
October 21, 2026 Google Play announces the MANAGE_CONTACTS policy
2026 (Android 17 Quarterly Platform Release 2) MANAGE_CONTACTS permission becomes available
2027 (Upcoming Android release) WRITE_CONTACTS no longer grants write access to apps targeting the upcoming Android release. Contact intents are standardized across devices
2027, not earlier than the upcoming Android release Play Console asks apps that use MANAGE_CONTACTS to submit a declaration
2027, not earlier than the upcoming Android release Play policy compliance required

FAQ

  • Does this affect every app?
    • The WRITE_CONTACTS deprecation change applies only to apps that target the upcoming Android release and after. Apps targeting older versions keep their current behavior, however, the new standardized contact editor will be available to all apps running on the new OS, regardless of their target SDK.
  • Can my app delete contacts with intent?
    • No. There’s no intent for deleting contacts. Users delete contacts in their contacts app. Apps with MANAGE_CONTACTS can delete contacts directly.
  • I already have my own contact editing screen. Can I keep it?
    • Only if your app qualifies for MANAGE_CONTACTS. Wanting to keep a custom design isn’t a qualifying reason on its own.
  • Does MANAGE_CONTACTS replace READ_CONTACTS?
    • MANAGE_CONTACTS includes read access so you don’t need to request both, but many apps qualify for READ_CONTACTS that do not need to modify contacts at all. These apps may continue to request READ_CONTACTS.
  • What about my users on older Android versions?
    • The contact intents work on older versions too, handled by the device’s contacts app. Most apps will work well on all devices using these intents. If your app is affected by a specific consistency issue only solved in the latest versions, you can keep the WRITE_CONTACTS permission in your manifest scoped with an appropriate maxSdkVersion.
ShareTweetSend
Previous Post

Sacha Baron Cohen says the new ‘Ali G’ film is his last comedy stunt

Next Post

TenPayGo and China’s Digital Opening to Foreigners – The Diplomat

Related News

Mobile

Apple loses $14bn Irish tax case against the EU

October 25, 2026
Mobile

iPhone Duo owners report cracked screens on launch day

October 24, 2026
Mobile

10 Best Practices For Designing Your Startup Website

October 23, 2026
Mobile

CAD to BOM Matching: New CAD Files to Existing Part Library

October 22, 2026
Next Post

TenPayGo and China’s Digital Opening to Foreigners – The Diplomat

Discussion about this post

Subscribe To Our Newsletters

    Customer Support


    1251 Wilcrest Drive
    Houston, Texas
    77042 USA
    Call-832.795.1420
    e-mail – news@theinsightpost.com

    Subscribe To Our Newsletters

      Categories

      • Africa
      • Africa-East
      • African Sports
      • American Sports
      • Arts
      • Asia
      • Australia
      • Business
      • Business Asia
      • Business- Africa
      • Canada
      • Defense
      • Education
      • Egypt
      • Energy
      • Entertainment
      • Europe
      • European Soccer
      • Finance
      • Germany
      • Ghana
      • Health
      • Insight
      • International
      • Investing
      • Japan
      • Latest Headlines
      • Life & Living
      • Markets
      • Mobile
      • Movies
      • New Zealand
      • Nigeria
      • Politics
      • Scholarships
      • Science
      • South Africa
      • South America
      • Sports
      • Tech
      • Travel
      • UK
      • USA
      • Weather
      • World
      No Result
      View All Result

      Recent News

      Sister Wives’ Meri Brown Reveals She Gets Weekly Marriage Proposals

      October 26, 2026

      What Does Trump’s Declining Latino Support Mean for Florida?

      October 26, 2026

      Large Hearts Dispense a Large Helping of Kindness

      October 26, 2026

      Seattle Seahawks dominate Chiefs 20-3 as Sam Darnold silences critics in potential Super Bowl preview

      October 26, 2026
      • Home
      • Advertise With Us
      • About Us
      • Corporate
      • Consumer Rewards
      • Forum
      • Privacy Policy
      • Social Trends

      Theinsightpost ©2026 | All Rights Reserved. Theinsightpost is an Elnegy LLC company, registered in Texas, USA

      Welcome Back!

      Login to your account below

      Forgotten Password?

      Retrieve your password

      Please enter your username or email address to reset your password.

      Log In

      Add New Playlist

      We are using cookies to give you the best experience on our website.

      You can find out more about which cookies we are using or switch them off in .

      No Result
      View All Result
      • Home
      • Insight
      • Blog
      • Business
      • Entertainment
      • Health
      • Politics
      • Shop
        • Gift Shop
        • Value Shop
        • Store
        • Bargain Shop
        • Discount
      • Sports
      • Tech
      • Travel
      • USA
      • Video
      • World
        • Asia
        • Africa
        • South America
        • North America
        • Europe
        • Oceania

      Theinsightpost ©2026 | All Rights Reserved. Theinsightpost is an Elnegy LLC company, registered in Texas, USA

      The Insight Post
      Powered by  GDPR Cookie Compliance
      Privacy Overview

      This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.

      Strictly Necessary Cookies

      Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.

      Cookie Policy

      More information about our Cookie Policy

      Clear examples do more than decorate an explanation: they show how an idea behaves under recognizable conditions. In education and software documentation alike, strong illustrations begin with a defined goal, then reveal the steps, assumptions, and result without unnecessary detail. A practical test example should state the input, expected output, and boundary condition, because these elements show whether a rule works beyond the simplest case. Including a contrasting case also helps readers distinguish a valid application from a tempting but incorrect one, while concise notes explain why the outcomes differ. When examples are updated with current data and checked against the underlying rule, they remain useful across classrooms, product guides, and professional training.
      Bij toegang tot Belgische casino’s via een tablet kunnen spelers accountgegevens, spelvoorwaarden en betaalopties overzichtelijk raadplegen, terwijl informatie over casinos zonder cruks aanvullende context biedt bij het beoordelen van beschikbare toegangsregels. Een stabiele mobiele verbinding en goed leesbare beveiligingsfuncties zijn daarbij belangrijk voor leeftijdscontrole, accountbeheer en verantwoord spelen.