Page Summary
-
Device Trust from Android Enterprise provides device posture signals to registered applications for computing a device trust score.
-
Access to device trust signals is restricted via an allowlist, requiring registration.
-
Available signals include OS version, pending updates, security patch levels, critical app details, device model/brand, screen lock complexity, management state, disk encryption, network state, Google Play Protect status, DNS over TLS status, and WebView package.
-
The management state signals vary depending on whether the application is running within the personal or work profile and the device ownership type.
-
Specific management state signals like
Device.WorkProfileStateare available starting from particular AMAPI SDK versions.
Device Trust from Android Enterprise makes available a set of device posture
signals on Device that authorized applications—including applications on the
allowlist and apps assigned the COMPANION_APP role (see
Manage application roles and
Policy Configuration)—can access to compute a trust
score for the device.
Each signal field on Device and its nested model classes includes a
corresponding get*Metadata() method returning Metadata, which reports any
Metadata.DataIssue encountered when retrieving the signal (such as missing
manifest permissions).
For information on how to integrate the Android Management API SDK in your application, see Device Trust from Android Enterprise - Integration guide.
| Signals | |
|---|---|
| OS Version |
Device#getSoftwareInfo() returns a
SoftwareInfo object containing OS version details
(older OS versions typically have more vulnerabilities):
|
| Android Device Policy version |
SoftwareInfo#getAndroidDevicePolicyVersionCode() and
SoftwareInfo#getAndroidDevicePolicyVersionName() return
the version code and user-visible version name of the Android Device
Policy app on the device.
|
| Does the device have pending OTA |
SoftwareInfo#getSystemUpdateInfo() returns a
SoftwareInfo.SystemUpdateInfo indicating whether there
is a pending OS update for the device (a proxy for whether the device is
vulnerable to exploits):
|
| Device Security Patch Level |
SoftwareInfo#getDeviceSecurityPatchInfos() returns a
list of
SoftwareInfo.SecurityPatchInfo objects (with
getComponent() and
getSecurityPatchLevel() returning a list of
SecurityPatchLevel objects) for the current security
patch level of the device across updatable
SecurityPatchComponent types:
|
| Published Security Patch Level |
SoftwareInfo#getPublishedSecurityPatchInfos() returns a
list of
SoftwareInfo.SecurityPatchInfo objects (with
getComponent() and
getSecurityPatchLevel() returning a list of
SecurityPatchLevel objects) for the current published
security patch level across updatable
SecurityPatchComponent types:
|
| Critical App Details |
Device#getApplicationReports() returns details on all
installed applications to extensibility apps and calling applications
with role
COMPANION_APP on an AMAPI-managed device (see
Manage application roles and
Policy
Configuration; when called inside a work profile, reports are
limited to apps installed in the work profile). For all other callers
(such as applications on the allowlist),
Device#getApplicationReports() returns details only on the
following critical apps:
Details are returned as a list of
ApplicationReport objects exposing:
|
| Device Hardware Info |
Device#getHardwareInfo() returns a
HardwareInfo object exposing:
|
| Screen lock complexity |
Device#getDeviceSettings() provides
DeviceSettings#getScreenLockComplexity(), returning a
DeviceSettings.ScreenLockComplexity value indicating
how complex the current user's or profile's screen lock is.
|
| Management State (and managing app) |
The returned information depends on the profile the application is
running in. For details, see the
Management state table.
|
| Disk encryption |
DeviceSettings#getEncryptionStatus() returns a
DeviceSettings.EncryptionStatus value indicating
whether the device's storage is encrypted.
|
| Access Network State (Network state and Wi-Fi state) |
Device#getNetworkInfo() returns a
NetworkInfo object, and
NetworkInfo#getNetworkParams() returns a list of
NetworkInfo.NetworkParams objects with details about
all active networks on the device:
|
| Google Play Protect VerifyApps |
DeviceSettings#getGooglePlayProtectVerifyAppsState()
returns the current
GooglePlayProtectVerifyAppsState.
|
| Is DNS over TLS enabled |
NetworkParams#getPrivateDnsState() returns a
PrivateDnsState value indicating whether private DNS is
used on the network.
|
| WebView package |
SoftwareInfo#getWebviewPackage() returns the name of
the current WebView package.
|
| Human-readable business name of the management provider |
On AMAPI-managed devices,
Device#getManagementProviderInfo() returns a
ManagementProviderInfo object whose
getBusinessName() method provides the human-readable
business name of the management provider. This field isn't set on
non-managed devices or devices managed by a custom DPC.
|
Management state
The values returned for the management signals depend on the profile that your
application is running in. Accessing signals from within the Personal Profile,
on a non-managed device, or on a device managed by a custom DPC requires your
application to be on the allowlist. On an AMAPI-managed fully managed device or
from within a Work Profile, applications assigned the
COMPANION_APP role can also access these signals without
being on the allowlist (limited to signals from the work profile when called
inside a work profile).
| Management state | Signals when called from within the Personal Profile | Signals when called from within the Work Profile |
|---|---|---|
| Non-managed device |
ownership:
PERSONALLY_OWNEDmanagementMode: UNMANAGEDmanagementAppPackageName: N/AworkProfileState:
|
N/A
|
| Work Profile on personally-owned device (BYOD) |
ownership:
PERSONALLY_OWNEDmanagementMode: UNMANAGEDmanagementAppPackageName: N/AworkProfileState:
|
ownership:
PERSONALLY_OWNEDmanagementMode: PROFILE_OWNERmanagementAppPackageName: Package name of the Profile Owner applicationworkProfileState:
|
| Work Profile on company-owned device |
ownership:
COMPANY_OWNEDmanagementMode: UNMANAGEDmanagementAppPackageName: N/AworkProfileState:
|
ownership:
COMPANY_OWNEDmanagementMode: PROFILE_OWNERmanagementAppPackageName: Package name of the Profile Owner applicationworkProfileState:
|
| Fully managed device |
N/A
|
ownership:
COMPANY_OWNEDmanagementMode: DEVICE_OWNERmanagementAppPackageName: Package name of the Device Owner applicationworkProfileState:
|