Android Device Lifecycle Reporting: Reconcile Batch Records and Management Status
A missing or old status report is the wrong record for a handset that was replaced or retired. Map the batch record to the Android Management API device fields below, and leave every unread cell blank.
Diperbarui

What goes wrong when the batch record and the status report are not the same row?
A missing or old status report is the wrong record for a device that was replaced or retired. Confirm the batch identifier, the accepted version, the reported version, the report time, the asset assignment, and the exception owner before anyone treats the console row as current. This page is a field dictionary for that check. It is not an automatic sync, and it does not turn one vendor's console into a shared report. The batch side is the record described on lifecycle management: firmware, Android version, app package, policy version, accessory kit, and packaging state for each batch. The report side is the Device resource in the Android Management API, fetched on 2026-10-11. A console that is not that API does not inherit these field names. Copy a value only when the cited side states it. Otherwise leave the cell blank.

| Item | Batch record | Device resource, fetched 2026-10-11 | Leave blank when |
|---|---|---|---|
| Device id | name, in the form enterprises/{enterpriseId}/devices/{deviceId} | The console does not show that name | |
| Batch id | Kept per batch, with the six items named on the lifecycle page | The Device resource has no batch-id field in this read | |
| Physical device across enrollments | previousDeviceNames lists earlier device names when the same physical device enrolled again. The serial number is the identifier used for that match. Names are in chronological order | The device has not enrolled before, or serialNumber is absent | |
| Serial number | hardwareInfo.serialNumber. On a personally-owned device running Android 12 and above, that field is the same value as enterpriseSpecificId | serialNumber is absent. The paragraph that defines hardwareInfo does not add a softwareInfoEnabled-style switch | |
| Model | hardwareInfo.model, the model of the device | model is absent. Do not fill it from a catalog | |
| Accepted version | Firmware, Android version, app package, and policy version recorded for that batch | The API page does not store the accepted batch baseline | |
| Accessory kit and packaging state | Recorded for each batch on the lifecycle page | This Device read has no field for either item | |
| Reported policy version | appliedPolicyVersion, an int64, the version of the policy currently applied. appliedPolicyName is the name of that policy | appliedPolicyVersion is absent | |
| Named policy | policyName, enterprises/{enterpriseId}/policies/{policyId}. If policyName is not specified, the policy name for the device's user is applied. This field can be changed by a patch | Do not read a blank policyName as 'no policy' | |
| Reported Android version string | softwareInfo.androidVersion, the user-visible Android version string. softwareInfo is available only when softwareInfoEnabled is true in the device's policy | The switch is not true, or softwareInfo is absent | |
| Reported build id | softwareInfo.androidBuildNumber, the Android build ID string meant for display. Same softwareInfo switch as the version string | The switch is not true, or androidBuildNumber is absent | |
| API level | apiLevel, the API level of the Android platform version running on the device | apiLevel is absent. Do not invent a level from the version string | |
| Reported app | applicationReports[] when applicationReportsEnabled is true. packageName is the package name. versionName is the app version as displayed to the user. versionCode is the app version code, which that page says can be used to tell whether one version is more recent than another | The switch is not true, or that package is absent. Do not copy the batch app package into this cell | |
| Report time | lastStatusReportTime, RFC 3339, the last time the device sent a status report | The field is absent. Do not substitute another timestamp | |
| Policy fetch time | lastPolicySyncTime, RFC 3339, the last time the device fetched its policy. A different event from the status report | The field is absent | |
| Deprecated compliance time | lastPolicyComplianceReportTime is marked deprecated on the same page | Do not use it as the report time | |
| Asset assignment | userName, the resource name of the user that owns the device, enterprises/{enterpriseId}/users/{userId} | A warehouse asset tag is not this field. Leave the tag blank until the project supplies it | |
| Exception owner | The lifecycle page says the matrix should name owners. It lists the app team for app updates, the MDM vendor for policy-console behavior, the OEM for hardware warranty, the partner for field support, and Vantora for batch records, reorders, and device-build coordination | No person is named yet. The Device resource has no owner field in this read |
Which timestamp is the status report?
Record lastStatusReportTime as the report time. The Device resource defines it as the last time the device sent a status report, in RFC 3339. lastPolicySyncTime is the last time the device fetched its policy. A fresh policy fetch does not fill the status-report cell. lastPolicyComplianceReportTime is marked deprecated on that page, so it is not the report time either. enrollmentTime is the time of enrollment, not a later status report. The page does not set a maximum age for lastStatusReportTime. If the project has a window, write that window next to the timestamp. If it has no window, leave the age cell blank and still keep the raw timestamp. An absent timestamp stays absent.
When can a reported version be read?
Read appliedPolicyVersion when it is present. It is the version of the policy currently applied, as an int64. appliedPolicyName is the name of the policy currently applied. policyName is the policy named for the device. Those are three fields. A difference between policyName and appliedPolicyName goes on the exception queue so a person can check it. It is not, by itself, a failed batch. Read softwareInfo only when softwareInfoEnabled is true in the device's policy. androidVersion is the user-visible Android version string. androidBuildNumber is the Android build ID string meant for display. apiLevel is a separate integer, the API level of the Android platform version running on the device. Do not derive one of these from another, and do not paste an example from the documentation into a device row. Read applicationReports only when applicationReportsEnabled is true. For each reported app, packageName is the package name, versionName is the version displayed to the user, and versionCode is the integer used to tell whether one version is more recent than another. The batch record's app package stays on the batch side until this array includes that package. Compare a batch policy version with appliedPolicyVersion only when both strings are present. If they differ, queue the row. The lifecycle page does not say that its policy-version string uses the same identifier as appliedPolicyVersion, so a difference is a check, not a verdict. If either side is absent, leave the comparison blank.

Which rows belong on the exception queue?
Queue a row when the two sides do not name the same device, the same version, or the same report time, or when a required field is absent. Assign the exception owner from the matrix on the lifecycle page. Do not mark the row resolved by copying the batch value into the report column. State is separate from a missing row. On the Device resource, state is the state to apply. A patch accepts only ACTIVE or DISABLED. DELETED is requested with enterprises.devices.delete. appliedState is the state currently applied. ACTIVE means the device is active. DISABLED means it is disabled. LOST means it is lost, and that state is only possible on organization-owned devices. PROVISIONING means the device is being provisioned, and newly enrolled devices stay there until a policy is applied. DELETED is not returned by an API call. It is used in the final status report when the device acknowledges deletion. If the user deletes the work profile or resets the device, the state remains unknown to the server. A missing row is not LOST, and an unknown state after a reset is not a returned DELETED. The two rows below use demonstration identifiers. They are not devices we observed. Every version, time, assignment, and owner cell stays empty.

| Row | Device or batch id | Accepted version | Reported version | Report time | Asset assignment | Exception owner |
|---|---|---|---|---|---|---|
| Demonstration | DEMO-BATCH-014 | |||||
| Demonstration | enterprises/demo/devices/demo-device-014 |
How do you recognize each exception without filling the blank?
Use the signal that was actually read. Do not promote a blank into a zero, a current timestamp, or a matching version.
| Exception | Signal you can check | Do not fill |
|---|---|---|
| No management row | The batch record names a device, and the Device list or get has no matching name | A report time or a reported version |
| No batch row | A Device name exists and no batch record names it | An accepted version |
| Stale or missing report | lastStatusReportTime is absent, or older than the window the project writes down | A number of days, or lastPolicySyncTime copied into the report-time cell |
| Policy name differs from applied name | policyName and appliedPolicyName are both present and are not the same name | A pass or fail for the batch |
| Version strings differ | The batch policy version and appliedPolicyVersion are both present and are not the same string | A verdict that they name the same object |
| Software or app report gated off | softwareInfoEnabled or applicationReportsEnabled is not true | The batch Android version or app package copied into the reported column |
| Lost, disabled, or deletion acknowledged | appliedState is LOST, DISABLED, or the device acknowledged deletion | LOST from a missing row, or DELETED when a reset left the server state unknown |
When this does not apply
Skip this page when the job is to wipe a device and hand it over. That check stays on Android device deprovisioning and handover. Skip it when the job is the supply window, spares, or reorder baseline. Those records stay on the lifecycle page. Skip these field names when the console is not the Android Management API. This page does not claim a live status feed, a cross-console sync, or one report layout for every management product. What a device still has to carry beyond MDM enrollment, so the batch can survive a later reorder, stays on MDM-ready vs rollout-ready Android devices.
What to send us
Send us the project model and build, the app package name, the management platform, and which of these fields the console returns: device name, appliedPolicyVersion, lastStatusReportTime, softwareInfo, and applicationReports. We reply within 1 business day. The reply names which exception rows still need an owner, and which cells stay blank. Use the button on this page. It opens the project brief with those inputs.
Method and sources
The dictionary is a reading of two pages, not a device test and not a ranking. The Device resource was fetched on 2026-10-11 from the Android Management API enterprises.devices reference. The batch fields are the ones stated on lifecycle management, read in the current page source on 2026-10-14, which matches the fetch of that URL on 2026-10-11. The demonstration ids were written for this table. They are not serial numbers, not enrollments, and not prices. Updated October 2026.
Pertanyaan Umum
Is lastStatusReportTime the same event as lastPolicySyncTime?
No. The Device resource defines lastStatusReportTime as the last status report and lastPolicySyncTime as the last policy fetch. A new policy fetch does not fill the status-report cell.
Does a missing Device row mean the device is LOST?
No. LOST is an appliedState, and the same page says it is only possible on organization-owned devices. A missing row stays a missing row.
Can the batch Android version fill a blank softwareInfo cell?
No. softwareInfo is available only when softwareInfoEnabled is true. Copying the batch string into the reported column hides the gap.
Ceritakan alur kerja dan aturan Anda.
Kami mengubah persyaratan menjadi perangkat yang siap diterapkan.