Stay organized with collections
Save and categorize content based on your preferences.
This page provides an overview of the new enterprise APIs, features, and
behavior changes introduced in Android 12 (API level 31).
Work profile
The following new features are available in Android 12 for work
profiles.
Security and privacy enhancements for work profile
The following features are available in Android 12 for personal
devices with a work profile:
The password
complexity
feature sets device-wide password requirements in the form of predefined
complexity buckets (High, Medium, Low, and None). If required, strict
password requirements can instead be placed on the work profile security
challenge.
Work profile security challenge onboarding has been streamlined. Setup
now takes into account whether device passcode meets admin requirements,
and makes it easy for the user to choose whether to increase the strength
of their device passcode or to use the work profile security challenge.
An enrollment-specific
ID
provides a unique ID that identifies the work profile enrollment in a
particular organization, and will remain stable across factory resets. Access
to other hardware identifiers of the device (IMEI, MEID, serial number) are
removed for personal devices with a work profile in Android 12.
Company-owned devices, with and without work profiles, can
adopt the features listed in the preceding list items, but are not required to
adopt them in Android 12.
You can
set
and
retrieve
work profile network logging. You can
delegate
network logging on the work profile to another work application. You can't use
network logging to monitor traffic in the personal profile.
Users have additional privacy controls for work profile apps. Users can grant
the following permissions to work profile apps unless denied by their IT
administrator. For each app in the work profile, the user can allow or deny
the following permissions:
Privacy and transparency enhancements for fully-managed devices
IT administrators can manage permission grants or choose to opt out of managing
sensor-related permission grants during provisioning. If the administrator
chooses to manage permissions, users see an explicit message during the setup
wizard. If the administrator chooses to opt out, users are prompted to accept or
deny permissions in-app when the app is first used. Administrators can always
deny permissions.
Network configuration
A device policy controller (DPC) can get the list of a
device's configured networks without requiring the location permission by using
a new API getCallerConfiguredNetworks
rather than using the existing API
getConfiguredNetworks
(which requires location permission). The list of networks returned is limited
to work networks.
A DPC on fully-managed devices can ensure only admin-provided networks are
configured on the device, also without requiring the location permission.
Administrators can use the keys generated in secure hardware for Wi-Fi
authentication by
granting
a KeyChain key to the Wi-Fi subsystem for authentication and
configuring
an enterprise Wi-Fi network with that key.
depending on the device OEM, preloaded assist apps or preloaded default IMEs
Google app, if it's preloaded.
Gboard app, if it's preloaded and the out-of-box default IME app.
On Android 12+:
Android Auto app, if it's preloaded.
The full list of application depends on the device OEM.
Deprecations
Android 12 includes the following notable API deprecations:
setPasswordQuality() and getPasswordQuality() are deprecated for setting
device-wide passcode on work profile devices that are personal devices rather
than company-owned. DPCs should use setRequiredPasswordComplexity() instead.
setOrganizationColor() and getOrganizationColor() are fully deprecated in
Android 12.
android.app.action.PROVISION_MANAGED_DEVICE no longer works on Android 12.
DPCs must implement activities with intent filters for the
ACTION_GET_PROVISIONING_MODE and ACTION_ADMIN_POLICY_COMPLIANCE intent
actions. Using ACTION_PROVISION_MANAGED_DEVICE to start provisioning causes
the provisioning to fail. To continue to support Android 11 and lower, EMMs
should continue to support the PROVISION_MANAGED_DEVICE constant.
setPermissionPolicy() and setPermissionGrantState() are deprecated for
granting sensor-related permissions for all work profile devices targeting
Android 12 and higher. The deprecations cause the following changes:
On devices upgrading from Android 11 to Android 12, existing permission
grants remain, but new permission grants are not possible.
Ability to deny permissions remains.
If you develop and distribute applications relying on admin-granted
permissions, you must ensure these follow the recommended way of requesting
permissions.
Applications that follow the recommended way of requesting permissions
continue to work as expected. Users are prompted to grant the permission;
the app must be able to handle any outcome.
Applications that rely on admin-granted permissions and explicitly access
permission-protected resources, without following the guidelines, may crash.
Learn more
To learn about other changes that might affect your app, read the Android 12
behavior changes pages (for apps targeting Android 12
and for all apps).
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-08-26 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-26 UTC."],[],[],null,["This page provides an overview of the new enterprise APIs, features, and\nbehavior changes introduced in Android 12 (API level 31).\n\nWork profile\n\nThe following new features are available in Android 12 for work\nprofiles.\n\nSecurity and privacy enhancements for work profile\n\nThe following features are available in Android 12 for personal\ndevices with a work profile:\n\n- The [password\n complexity](/reference/android/app/admin/DevicePolicyManager#setRequiredPasswordComplexity(int)) feature sets device-wide password requirements in the form of predefined complexity buckets (High, Medium, Low, and None). If required, strict password requirements can instead be placed on the [work profile security\n challenge](/work/dpc/security#work_profile_security_challenge).\n- Work profile security challenge onboarding has been streamlined. Setup now takes into account whether device passcode meets admin requirements, and makes it easy for the user to choose whether to increase the strength of their device passcode or to use the work profile security challenge.\n- [An enrollment-specific\n ID](/reference/android/app/admin/DevicePolicyManager#setOrganizationId(java.lang.String)) provides a unique ID that identifies the work profile enrollment in a particular organization, and will remain stable across factory resets. Access to other hardware identifiers of the device (IMEI, MEID, serial number) are removed for personal devices with a work profile in Android 12.\n- [Company-owned devices](#company-owned), with and without work profiles, can adopt the features listed in the preceding list items, but are not required to adopt them in Android 12.\n- You can [set](/reference/android/app/admin/DevicePolicyManager#setNetworkLoggingEnabled(android.content.ComponentName,%20boolean)) and [retrieve](/reference/android/app/admin/DevicePolicyManager#retrieveNetworkLogs(android.content.ComponentName,%20long)) work profile network logging. You can [delegate](/reference/android/app/admin/DevicePolicyManager#DELEGATION_NETWORK_LOGGING) network logging on the work profile to another work application. You can't use network logging to monitor traffic in the personal profile.\n- Users have additional privacy controls for work profile apps. Users can grant the following permissions to work profile apps unless denied by their IT administrator. For each app in the work profile, the user can allow or deny the following permissions:\n - Location\n - Camera\n - Microphone\n - Body sensor\n - Physical activity\n\nCompany-owned devices\n\nThe following new features are available for company-owned devices. The term\n*company-owned device* refers to both [fully managed\ndevices](https://developers.google.com/android/work/requirements/fully-managed-device)\nand [work profile devices that are\ncompany-owned](/reference/android/app/admin/DevicePolicyManager#isOrganizationOwnedDeviceWithManagedProfile()).\n\n- An IT administrator can [disable\n USB](/reference/android/app/admin/DevicePolicyManager#setUsbDataSignalingEnabled(boolean)),\n except for charging functions, on company-owned devices. This feature includes\n the capability to [check if this feature is\n supported](/reference/android/app/admin/DevicePolicyManager#canUsbDataSignalingBeDisabled())\n on the device and to [check if it is currently\n enabled](/reference/android/app/admin/DevicePolicyManager#isUsbDataSignalingEnabled()).\n\n- Company-owned devices with a work profile can [limit the input methods used in\n the personal\n profile](/reference/android/app/admin/DevicePolicyManager#setPermittedInputMethods(android.content.ComponentName,%20java.util.List%3Cjava.lang.String%3E))\n to allow only system input methods.\n\n- In Android 12 you can create a delegation scope. Enable and collect security\n log events by calling\n [`setDelegatedScopes()`](/reference/android/app/admin/DevicePolicyManager#setDelegatedScopes(android.content.ComponentName,%20java.lang.String,%20java.util.List%3Cjava.lang.String%3E))\n and passing\n [`DELEGATION_SECURITY_LOGGING`](/reference/android/app/admin/DevicePolicyManager#DELEGATION_SECURITY_LOGGING).\n Security logging helps organizations gather usage data from devices that can be parsed and programmatically evaluated for malicious or risky behavior. Delegate apps can [enable security\n logging](/reference/android/app/admin/DevicePolicyManager#setSecurityLoggingEnabled(android.content.ComponentName,%20boolean)),\n [verify that logging is\n enabled](/reference/android/app/admin/DevicePolicyManager#isSecurityLoggingEnabled(android.content.ComponentName)),\n and [retrieve the security\n logs](/reference/android/app/admin/DevicePolicyManager#retrieveSecurityLogs(android.content.ComponentName)).\n\nOther\n\nThe following section describes changes in enterprise APIs that are not specific\nto work profiles or company-owned devices.\n\nUnmanaged device certificate management\n\nDevices without management are now able to take advantage of Android's on-device\nkey generation to manage certificates:\n\n- The user can grant permission to a certificate management app to manage their credentials (not including CA certificates).\n- The certificate management app can use Android's on-device key generation.\n- The certificate management app can declare a list of apps and URIs where the credentials can be used for authentication.\n\nNew APIs provide new functionality:\n\n- Check if the existing device-wide password is [compliant against explicit\n device password\n requirements](/reference/android/app/admin/DevicePolicyManager#isActivePasswordSufficientForDeviceRequirement()).\n- Check whether a certificate and private key are [installed under a given\n alias](/reference/android/app/admin/DevicePolicyManager#hasKeyPair(java.lang.String)).\n\nPrivacy and transparency enhancements for fully-managed devices\n\nIT administrators can manage permission grants or choose to opt out of managing\nsensor-related permission grants during provisioning. If the administrator\nchooses to manage permissions, users see an explicit message during the setup\nwizard. If the administrator chooses to opt out, users are prompted to accept or\ndeny permissions in-app when the app is first used. Administrators can always\ndeny permissions.\n\nNetwork configuration\n\nA [device policy controller](/work/dpc/build-dpc) (DPC) can get the list of a\ndevice's configured networks without requiring the location permission by using\na new API [getCallerConfiguredNetworks](/reference/android/net/wifi/WifiManager#getCallerConfiguredNetworks())\nrather than using the existing API\n[getConfiguredNetworks](/reference/android/net/wifi/WifiManager#getConfiguredNetworks())\n(which requires location permission). The list of networks returned is limited\nto work networks.\n\nA DPC on fully-managed devices can ensure only admin-provided networks are\nconfigured on the device, also without requiring the location permission.\n\nAdministrators can use the keys generated in secure hardware for Wi-Fi\nauthentication by\n[granting](/reference/android/app/admin/DevicePolicyManager#grantKeyPairToWifiAuth(java.lang.String))\na KeyChain key to the Wi-Fi subsystem for authentication and\n[configuring](/reference/android/net/wifi/WifiEnterpriseConfig#getClientKeyPairAlias())\nan enterprise Wi-Fi network with that key.\n\nConnected apps auto-granting\n\nTo allow a better user experience, a few preloaded applications have\nauto-granted the\n[configuration to share personal and work data](https://support.google.com/work/android/answer/10064639).\n\nOn Android 11+:\n\n- depending on the device OEM, preloaded assist apps or preloaded default IMEs\n- Google app, if it's preloaded.\n- Gboard app, if it's preloaded and the out-of-box default IME app.\n\nOn Android 12+:\n\n- Android Auto app, if it's preloaded.\n\nThe full list of application depends on the device OEM.\n| **Note:** IT admins cannot revoke these auto-granted configurations.\n\nDeprecations\n\nAndroid 12 includes the following notable API deprecations:\n\n- `setPasswordQuality()` and `getPasswordQuality()` are deprecated for setting device-wide passcode on work profile devices that are personal devices rather than company-owned. DPCs should use `setRequiredPasswordComplexity()` instead.\n- `setOrganizationColor()` and `getOrganizationColor()` are fully deprecated in Android 12.\n- `android.app.action.PROVISION_MANAGED_DEVICE` no longer works on Android 12. DPCs must implement activities with intent filters for the `ACTION_GET_PROVISIONING_MODE` and `ACTION_ADMIN_POLICY_COMPLIANCE` intent actions. Using `ACTION_PROVISION_MANAGED_DEVICE` to start provisioning causes the provisioning to fail. To continue to support Android 11 and lower, EMMs should continue to support the `PROVISION_MANAGED_DEVICE` constant.\n- `setPermissionPolicy()` and `setPermissionGrantState()` are deprecated for granting sensor-related permissions for all work profile devices targeting Android 12 and higher. The deprecations cause the following changes:\n - On devices upgrading from Android 11 to Android 12, existing permission grants remain, but new permission grants are not possible.\n - Ability to deny permissions remains.\n - If you develop and distribute applications relying on admin-granted permissions, you must ensure these follow the recommended way of requesting permissions.\n - Applications that follow the recommended way of requesting permissions continue to work as expected. Users are prompted to grant the permission; the app must be able to handle any outcome.\n - Applications that rely on admin-granted permissions and explicitly access permission-protected resources, without following the guidelines, may crash.\n\nLearn more\n\nTo learn about other changes that might affect your app, read the Android 12\nbehavior changes pages (for [apps targeting Android 12](/about/versions/12/behavior-changes-12)\nand [for all apps](/about/versions/12/behavior-changes-all))."]]