ByteScope

Android Sensor Viewer

Every sensor the phone has, its spec sheet, live values the browser cannot reach, and the digitiser's raw multitouch stream.

Everything is read over the USB cable and stays in this tab. No app is installed on the phone and nothing is uploaded.

Checking browser support…

What this page runs, and what it costs

Every command is a read. Nothing here changes a setting, installs anything, or writes to the phone.

CommandWhat it givesWhat it costs
dumpsys sensorserviceThe sensor table and each sensor's recent-event buffer — the live values on this page.Tens of kilobytes of text per run, and it has no smaller form. This is why the live loop is off until you start it.
dumpsys thermalserviceEach thermal zone's temperature and whether the phone is throttling.A couple of kilobytes; it rides along with the sensor dump.
getevent -lpEvery input device and its axis ranges, used to calibrate the touch view.Runs once and exits.
getevent -lt /dev/input/eventNThe live multitouch stream: positions, tracking ids, pressure and contact size.A process that keeps running until it is killed, and it keeps the phone awake while it does.
wm sizeThe display resolution, so touch coordinates can be placed on screen.Runs once and exits.

Sensor names, Android type ids, unit symbols and event names are the device's own identifiers and are never translated — they are what you match against your own shell output.

About this tool, FAQ and related tools

About this tool

Plug an Android phone into a Chromium browser over USB and this page reads its sensors: the full table of what the hardware offers, live values from the accelerometer, gyroscope, magnetometer, barometer and the ambient light sensor, the temperature of every thermal zone, and a live picture of your fingers on the touch panel drawn from the digitiser's own event stream. Nothing is installed on the phone and nothing is uploaded — this page is a static file with no server behind it, and the readings stop existing when you close the tab.

Why your browser cannot read the ambient light sensor

The Generic Sensor API gives a web page the accelerometer, the gyroscope and the magnetometer after a permission prompt. Ambient light is the one it does not give you: AmbientLightSensor shipped behind a Chrome flag and has never been on by default, and neither Safari nor Firefox implements it — the privacy argument being that a light reading leaks where you are and, at a high enough rate, roughly what is on a screen nearby. So on the open web, lux is unavailable. Over ADB it is simply a line in a system dump, because the debugging channel was never meant to be the same kind of boundary: the shell that reads it is one you enabled by hand, over a cable, on a phone you are holding. That gap is why this page exists in this shape at all.

A polled snapshot is not a high-rate capture

The live values here come from dumpsys sensorservice, which prints the last few dozen events each sensor produced into a ring buffer. This page reads that buffer once or twice a second and merges the new events into the traces, each placed at the timestamp the hardware gave it — which is why one read per second can draw a dozen points. What it cannot do is guarantee that nothing was missed: a sensor running at 200 Hz overruns its buffer between reads, and the events that fell out are gone. So the traces show shape and drift, not a waveform. If you need every sample, you need an app on the phone registering a listener, and no amount of shell access substitutes for that. The page also prints the cost of each read, because that dump is tens of kilobytes of text and pulling it once a second is real work for the phone.

Why your sensor list has no range, resolution or power

The spec table shows what the platform prints, and the platform stopped printing three of the interesting fields a long time ago. maxRange, resolution and power exist on the platform's sensor object and appear in the protobuf form of the same dump, but the text dump has not carried them since around Android 8.1, so on a Pixel those columns are empty for every sensor. Rather than fill a column with dashes — which reads as "this accelerometer has no measurement range" — the page removes the columns and says why underneath. Some manufacturers add them back: Samsung builds often print range, resolution and a power figure in milliamps, and when they do the columns reappear. Everything else is what the sensor HAL enumerated: handle, vendor part name, Android type, reporting mode, minimum delay, maximum rate, FIFO depth, and whether the sensor can wake the phone from sleep.

Pressure and contact area are what the web does not give you

The touch panel section streams getevent from the phone's digitiser and reassembles it into fingers. What arrives is more than coordinates: ABS_MT_TRACKING_ID is the identity the kernel assigns each contact, so a finger can be followed across the screen; ABS_MT_PRESSURE is how hard the panel thinks you are pressing, in units it invents for itself; and ABS_MT_TOUCH_MAJOR is the width of the contact ellipse, which is how a phone tells a fingertip from a palm. A browser's touch events carry none of that reliably — force is unimplemented or synthetic almost everywhere, and radiusX is a rough guess. Not every panel provides them either: plenty of capacitive screens report no pressure at all, and this page says so rather than shading every touch identically and letting you believe it measured something.

This is a diagnostic view, not a calibration tool. It cannot change how the panel behaves, and a jump in the coordinates is not proof of a broken digitiser — a dirty screen, a cheap charger injecting noise, or a case pressing on the edges all produce the same picture. What it is good for is seeing the raw truth quickly: whether a dead patch reports nothing at all, whether a ghost touch carries a tracking id, whether the gyroscope drifts while the phone sits still. From here, the Web ADB hub has the whole device dashboard, the battery page reads capacity and cycle count, and the browser's own Screen Test checks the display itself.

Frequently asked questions

How do I test a phone's touchscreen for dead spots?

Start the touch stream on this page and drag one finger slowly across the whole screen, edge to edge, then repeat in the other direction. A dead area shows up as a gap where the dot stops moving while your finger keeps going, and the numeric table stops updating with it. A digitiser that is failing rather than dead usually shows the opposite: the coordinates jitter, or a contact appears and disappears with a new tracking id each time. Do it with the case off and with the phone on the data cable alone — a noisy charger is the most common cause of ghost touches, and it produces exactly the same symptoms as a faulty panel.

Why does my sensor list show no range, resolution or power?

Because Android's text dump does not print them. Those three attributes are part of the platform's sensor object and are included in the protobuf version of the same dump, but the human-readable form has omitted them since roughly Android 8.1 — so a Pixel shows none of them, and this is not a limitation of USB, of the shell, or of this page. Some manufacturers patch them back in: Samsung firmware frequently prints range, resolution and a power draw in milliamps, and the columns then appear automatically. What you can always see is the type, the reporting mode, the minimum delay between samples and the maximum rate, which is usually what you wanted the range for anyway.

How can I tell if my gyroscope is drifting?

Put the phone flat on a table, do not touch it, and watch the gyroscope trace for half a minute. A healthy gyroscope reports something very close to zero on all three axes with a little noise around it; a drifting one sits at a small constant offset — a persistent 0.01 to 0.05 rad/s on one axis is the classic signature, and it is what makes a compass slowly rotate in a map app or a VR view creep sideways. Because this page never pads the chart's range out to zero, a small bias stays visible instead of being flattened. The phone has to be genuinely still, though: a table someone is typing on is not still.

What is getevent and is it safe to run?

`getevent` is a small tool built into Android that prints raw input events from `/dev/input` — the same events the framework reads to build touches and key presses. It only reads: it cannot inject a tap, change a setting, or write anything to the phone. (`sendevent` is the tool that injects, and this page never runs it.) The one real cost is that a streaming `getevent` keeps a process alive and keeps the phone from idling, which is why this page kills it when you press Stop, when you leave the page, when the tab goes to the background, and when the device is unplugged.

Can I read the ambient light sensor without ADB?

Not from a web page. Chrome's ambient light interface sits behind a flag that is off by default and is not exposed to ordinary sites, and Safari and Firefox do not implement it at all, so on the open web the practical answer is no. An app installed on the phone can read the same sensor with no special permission, which is why torch and camera apps use it freely — the restriction is on the browser, not on the sensor. Over ADB, this page reads the value out of the system's own sensor dump, in lux, exactly as the platform reports it to apps.