關於這個工具
把 Android 手機用 USB 接上 Chromium 系瀏覽器,這一頁就會讀它的感測器:硬體提供的完整清單、加速度計/陀螺儀/磁力計/氣壓計/環境光的即時值、每個熱區的溫度,還有直接用觸控面板自己送出的事件畫出來的手指軌跡。手機上不會裝任何東西,也不會上傳。這一頁是沒有後端的靜態檔案,讀到的值在你關掉分頁的那一刻就不存在了。
為什麼瀏覽器讀不到環境光感測器
Generic Sensor API 在徵得同意後,會把加速度計、陀螺儀、磁力計交給網頁。唯一不給的就是環境光:AmbientLightSensor 在 Chrome 一直躲在 flag 後面,從來沒有預設開啟,Safari 和 Firefox 更是沒有實作。理由是隱私——亮度值會洩漏你在哪裡,讀得夠快甚至能推測旁邊螢幕上大致是什麼。所以在開放網路上,照度就是拿不到。但走 ADB,它只是系統 dump 裡的一行,因為除錯通道從來就不是同一種邊界:讀它的那個 shell,是你親手打開的、用線接的、拿在手上的那台手機。這個落差,正是這一頁長成這個樣子的原因。
輪詢快照不等於高頻取樣
這裡的即時值來自 dumpsys sensorservice,它會把每顆感測器最近幾十筆事件寫進一個環形緩衝區。這一頁每一到兩秒讀一次那個緩衝區,只把新的事件併進曲線,每一筆都放在硬體給它的時間戳上——所以每秒讀一次也可能畫出十幾個點。做不到的是保證沒有漏掉:跑在 200 Hz 的感測器會在兩次讀取之間把緩衝區寫滿一輪,掉出去的事件就回不來了。所以這些曲線看的是形狀與偏移,不是波形。真要每一筆取樣,就得在手機上跑一個註冊 listener 的 app,shell 權限再高也代替不了。頁面也會標出每次讀取的代價,因為那份 dump 是幾十 KB 的文字,每秒抓一次對手機是實實在在的工作。
為什麼感測器清單沒有量程、解析度和耗電
這張表顯示的是平台印出來的東西,而平台早就不印其中三個最有意思的欄位了。maxRange、resolution、power 在平台的感測器物件上都有,同一份 dump 的 protobuf 版本也帶著它們,但文字版從 Android 8.1 前後就不再輸出,所以在 Pixel 上這三欄對每顆感測器都是空的。與其把整欄填滿破折號——那讀起來像「這顆加速度計沒有量程」——這一頁乾脆把欄位拿掉,並在下面說明原因。有些廠商會自己補回去:Samsung 的版本常常印出量程、解析度和以毫安培計的耗電,這時候欄位就會自動出現。其餘欄位都是感測器 HAL 列舉的內容:handle、廠商料號名稱、Android 型別、回報方式、最小間隔、最高頻率、FIFO 深度,以及這顆感測器能不能把睡著的手機叫醒。
壓力和接觸面,正是網頁拿不到的東西
觸控面板這一段會從手機的觸控面板串接 getevent,再把它組回一根一根手指。送過來的不只是座標:ABS_MT_TRACKING_ID 是核心配給每個觸點的身分,有了它才能在螢幕上跟著同一根手指走;ABS_MT_PRESSURE 是面板認為你按得多重,單位是面板自己訂的;ABS_MT_TOUCH_MAJOR 是接觸橢圓的寬度,手機就是靠它分辨指尖和手掌。瀏覽器的觸控事件這些都靠不住——force 在幾乎所有環境不是沒實作就是合成值,radiusX 也只是粗估。而且不是每片面板都給:完全不回報壓力的電容式螢幕很常見,這一頁會直接說出來,而不是把每個觸點畫成同樣的深淺,讓你以為它量到了什麼。
這是診斷用的畫面,不是校正工具。它改變不了面板的行為,座標跳一下也不等於觸控面板壞了——螢幕髒了、劣質充電器灌進雜訊、保護殼壓到邊緣,畫出來都是同一副樣子。它擅長的是讓你很快看到原始事實:沒反應的那一塊是不是真的什麼都沒回、幽靈觸控有沒有帶追蹤 id、手機放著不動陀螺儀會不會漂。接下來:Web ADB 首頁有完整的裝置儀表板,電池頁讀得到容量與循環次數,而純瀏覽器的螢幕測試則負責檢查顯示本身。