dumpsys sensorservice
read-onlyEvery sensor the phone has, with its vendor, type, rates and batching — plus a buffer of recent readings.
- Command
- adb shell dumpsys sensorservice
- Commands
- System services (dumpsys)
- Risk
- read-only
Syntax
dumpsys sensorserviceExamples
dumpsys sensorserviceThe sensor table and the last readings per sensor.
getevent -lpThe other half of the input picture: raw evdev devices, including the touchscreen.
Reading the output
Sample output
Sensor List:
0x00000001) LSM6DSO Accelerometer | STMicro | ver: 1 | type: android.sensor.accelerometer(1) | perm: n/a | flags: 0x00000000
continuous | minRate=12.50Hz | maxRate=416.00Hz | FIFO (max,reserved) = (3000, 600) events | non-wakeUp
Accelerometer: last 50 events
1 (ts=12345.678901234, wall=13:37:01.234) 0.12, 9.81, 0.03,Each sensor is a hex handle, a close paren, then pipe-separated fields, followed by a tab-indented line of rates and batching. Further down, the recent-event buffers are keyed by the sensor's *name* — not its handle — and are printed newest first. Field order is not stable across versions or manufacturers, so read by label.
Output fields
| Field | Meaning |
|---|---|
| 0x…) | The sensor handle. The one token every version prints. |
| type: android.sensor.x(N) | The platform type string and its numeric value. |
| minRate / maxRate | Hertz — and the naming is inverted from what it looks like: minRate comes from the maximum delay and maxRate from the minimum delay. |
| FIFO (max,reserved) | Batching capacity in events. `no batching` appears instead when there is none. |
| wakeUp / non-wakeUp | Whether the sensor can wake the phone from suspend. |
| ts= | Seconds on the boot-time clock, which a suspend can make non-monotonic in the buffer. |
| [value masked] | The caller lacks the permission that sensor needs; the reading is withheld, not missing. |
What access it needs
`SensorService` is native, so its check is not the usual Java one: `SensorService::dump` asks `PermissionCache::checkCallingPermission` for `android.permission.DUMP`, which the Shell package holds, and on failure appends a denial line in place of the listing. No root is needed to see the sensor table. There is a second, quieter gate above that, and it is the one that will confuse you. Inside the same function `privileged` is computed as `getCallingUid() == 0` — root, and nothing else. An `adb shell` runs as uid 2000, so it is never privileged, and every sensor whose `getRequiredPermission()` is non-empty has its recent-event buffer switched to the masked format. Nothing is refused and no warning is printed: the timestamps still appear, and where the numbers should be you get `[value masked]`. That is not a missing reading, a sleeping sensor or a broken driver, and re-running will not change it. It is the only thing on this page that `adb root` would alter, and on a user build `adb root` is refused, so on a retail phone the masked sensors stay masked. The sensor table itself — handles, vendors, rates, batching — is never masked, which is why the Android Sensor Tester can build its list from a plain shell.
Failure messages, decoded
| Message | Meaning |
|---|---|
| Permission Denial: can't dump SensorService from pid=4821, uid=10231 | Native code, so this one does **not** have the doubled `from from` of the Java dumps and does not name the missing permission — match it as its own string. It is appended to the result buffer and therefore arrives on stdout in place of the sensor list, which is why it reads at a glance like a phone with no sensors. |
| No Sensors on the device | Printed when the service holds no sensors at all, immediately followed by a `devInitCheck : <n>` line carrying the sensor device's own init status. A negative value there is an errno from a hardware layer that never came up — a very different problem from an emulator image that genuinely ships no sensors, and the only way to tell the two apart from this dump. |
| Can't find service: sensorservice | Printed to stderr by the `dumpsys` binary before the service was ever contacted: the service manager has no `sensorservice` entry. Normal during boot. Because it goes to stderr, a run captured without `2>&1` shows an empty listing with no explanation in it anywhere. |
| *** SERVICE 'sensorservice' DUMP TIMEOUT (10000ms) EXPIRED *** | Ten seconds is the `dumpsys` default and this dump holds the service's connection lock while it walks every sensor and every recent-event buffer. What survives is the head of the output — the sensor table — and what is lost is the tail, which is the recent events. A truncated dump is still a usable inventory and is not a usable sample of readings. |
Version and vendor notes
- The text dump has printed no maximum range, resolution or power draw for many releases. Those exist in the platform API and in the proto encoding, so a build that shows them is OEM-patched.
- Two sensors with the same name make the recent-event buffers ambiguous, and a wrong join plots live values against the wrong sensor.
- This is the least stable dump in the family: its text is assembled by several different components with no schema between them.
We have a UI for this
Android Sensor Tester runs this command over USB and parses what comes back — a Chromium browser, no SDK, nothing uploaded.
Related commands
Commands that turn up in the same session as dumpsys sensorservice.
| Command | What it does |
|---|---|
| getevent | Streams raw input events straight from the kernel, or lists what each input device can report. |
| dumpsys thermalservice | Whether the phone is throttling, and every thermal zone the hardware layer reports, in degrees Celsius. |
| wm size | Reports the display's resolution, or overrides it so the phone pretends to be a different screen. |
More System services (dumpsys) commands
| Command | What it does |
|---|---|
| dumpsys battery | The battery service's live state: level, status, health, voltage and temperature. |
| dumpsys diskstats | Free space per partition, a disk write latency check, and a cached per-app breakdown of what is using storage. |
| dumpsys meminfo | Which processes are using the most memory, measured as proportional set size. |
| dumpsys package | Everything the package manager knows about one app: version, paths, flags, install source and per-user state. |
| dumpsys activity activities | Which app is in the foreground, and the task and stack structure behind it. |
| dumpsys dropbox | The platform's ring buffer of crashes, ANRs and tombstones — how you read ANR traces without root. |
Checked against AOSP, toybox and kernel sources while writing the parsers behind our Web ADB tools. Where a behaviour genuinely varies by Android version or manufacturer, this page says so instead of giving a number that would be wrong on half the phones out there.