Ai đó tặng bạn nửa giá
Nhập mã này trong ứng dụng khi mở khóa. Nó không gắn với bạn hay với máy này.
Chiếc điện thoại làm việc
như một thiết bị đo thực thụ.
Signal Collector liên tục ghi dữ liệu cảm biến, vô tuyến và mạng mà máy của bạn với tới được, thẳng vào máy — không có kho đám mây, không có dữ liệu đo nào rời khỏi thiết bị.
Ảnh chụp thật · Pixel 10a
-
Một phép đo đang chạy. Vòng tròn hiện vệ tinh, mạng và cảm biến ngay khi chúng về.
-
Chọn đo cái gì. Mỗi nguồn là một dòng nói rõ nó ghi những gì.
-
Bắt đầu, đặt lại và dừng, với thời lượng, quãng đường và số bản ghi ở phía trên.
-
Phần dưới của bảng: mỗi nguồn đang làm gì và tệp nào rời khỏi máy.
-
Cài đặt: gửi tới máy chủ của riêng bạn, đơn vị, và điều gì xảy ra sau khi dừng.
Thử nghiệm nội bộ
Phiên bản kế tiếp, trước khi cửa hàng có nó.
Mọi bản dựng đều vào thử nghiệm nội bộ trước khi lên bản chính thức. Hãy tham gia bằng tài khoản Google mà máy đang đăng nhập, rồi bản cập nhật sẽ đến như mọi bản khác.
Phạm vi MVP
Một lần đi.
Toàn bộ bối cảnh.
- 01GPS, GNSS và cảm biến của thiết bị
- 02Mạng di động: LTE / 5G / 3G / 2G
- 03Wi‑Fi, Bluetooth và bối cảnh mạng
- 04Lập bản đồ Internet liên tục qua Wi‑Fi và di động
Dùng để làm gì
Mỗi tình huống đều kết thúc
bằng một tệp.
Một thiết bị đo không được chọn vì danh sách nguồn của nó mà vì câu hỏi nó trả lời. Sáu trong mười hai tình huống mà ứng dụng được dựng cho — mỗi tình huống là một lần đi, và cuối lần đi là một tệp.
Điểm chết trong phòng họp
Đi khắp sàn với chiếc máy trong túi và nói một ghi chú ở mỗi cửa. Kết quả là thông lượng theo từng giây, AP mà máy thực sự bám vào, và một căn phòng thay cho một cuộc tranh cãi giữa hai bộ phận.
Drive test mà không cần xe chuyên dụng
Cả hai SIM cùng quét, GPS ở nhịp một giây, máy kẹp trên táp lô. Mỗi lần đổi công nghệ, Cell ID hay PCI đều rơi vào dữ liệu như một sự kiện, nên các lần chuyển giao hiện ra với vị trí chính xác đến mét.
Khảo sát ở nơi GPS không cho gì
Trong kho, bầu trời là mái nhà. Đánh dấu từng lối đi bằng một tấm ảnh chụp từ khung ngắm của chính ứng dụng và thu các AP, liên kết MLO cùng khoảng cách RTT — một bản đồ phủ sóng trước khi mua chiếc AP mới đầu tiên.
Những cảm biến tự báo số
Hàng chục nhiệt kế BLE quanh một tòa nhà, không cái nào được ghép đôi. Đi ngang qua là nhiệt độ, độ ẩm và điện áp pin của chúng hiện ra có tên gọi và theo đơn vị SI, bên cạnh chuỗi byte mà chúng đến từ đó.
Bằng chứng cho chủ nhà
Mười phút đi bộ cho ra một tệp có dấu thời gian, vị trí, cường độ tín hiệu và ảnh chụp các phòng. “Chỗ nào sóng cũng tốt” trở thành một khẳng định có thể kiểm chứng.
Khách hàng không chấp nhận đám mây
Đo như thường lệ rồi gửi tới S3, WebDAV hay SFTP của riêng bạn — hoặc trao tay một tệp. Ảnh và ghi âm không bao giờ chạm vào thư viện ảnh của máy, nên bản NDA vẫn ký được.
Công việc bạn có thể
nhìn thấy.
Phiên bản 1.5.1 đưa cả mười hai ngôn ngữ vào mọi bản cài, cho bạn nhìn thấy một lần xuất dài hay lệnh Đặt lại đang chạy, và thêm một sổ rời cho các điểm, ảnh và phép kiểm tra lấy khi không có phép đo nào chạy.
Những ngôn ngữ thực sự có mặt
Google Play trước đây chỉ giao những ngôn ngữ mà máy có vào lúc cài đặt, nên phần chọn ngôn ngữ riêng cho ứng dụng đưa ra tiếng Séc và các thứ tiếng khác mà phía sau không có chuỗi nào. Nay cả mười hai bản dịch đều nằm trong mọi bản cài.
Sao chổi trên phím
Tải xuống, Chia sẻ và Đặt lại mất từ vài giây đến vài phút với một phép đo lớn. Nay có một sao chổi chạy quanh mép phím, đuôi dài dần theo phần đã xong, và một dòng chạy bên dưới cho biết đã xong bao nhiêu, đã chạy bao lâu và còn lại chừng nào. Dung lượng trống hiện ra trước khi bắt đầu ghi — màu hổ phách khi sắp cạn, màu đỏ khi bản xuất sẽ không vừa.
Một cuốn sổ rời
Điểm khảo sát, ảnh, ghi âm, phép kiểm tra Internet một lần và một chu trình thông lượng Wi-Fi không còn cần Bắt đầu. Khi không có phép đo nào chạy, chúng vào một bản ghi riêng không có bộ thu, không giữ máy thức và không trừ vào giờ miễn phí — với thẻ riêng, tệp Chia sẻ riêng và lệnh Xóa riêng.
Chia sẻ từ biểu tượng, điều khiển hệ thống
Nhấn giữ biểu tượng ứng dụng sau khi một phép đo đã dừng và Chia sẻ nằm ngay cạnh Bắt đầu; nó mở ứng dụng rồi bắt đầu xuất dữ liệu ngay. Công tắc, ô văn bản, lựa chọn và thông báo nay là các điều khiển Android chuẩn — các phím và bản thân thiết bị vẫn giữ nguyên.
Nothing lost
on the way out.
Version 1.5.0 adds no new key. It goes over everything that could cost a measurement its data — a Reset under a stray thumb, a point number used twice, an export torn in half by a second export — and closes each one, with a test that keeps it closed.
A Reset that asks first
The first touch on Reset deletes nothing. It opens a dialog that names what would go: the measurements, the photos and the voice notes. Cancel keeps everything; only a confirmation wipes. A thumb that brushes the key in a corridor no longer ends a day's work.
Points keep their numbers
Stop a measurement, start it again, mark a point: it gets the next number, not a repeat of one already in the file. The same holds for photo and voice marks, so two records never share one point index and the export stays unambiguous.
An export in one piece
Export takes a single atomic snapshot of the database, and two export requests at once queue instead of tearing one archive. The manifest is computed from the bytes that actually went into the archive, with a SHA-256 for every file. You get a readable archive or a plain error — never a silent torso.
Failures that stay failures
When the writer loses a batch, Stop cannot turn the run into a success. Encrypted Eddystone telemetry stops showing up as plausible plain numbers. Dual-SIM attribution, WPA3-only networks, probe time budgets and the microphone handoff are hardened, and the expandable cards tell TalkBack what they are.
Started without
opening it.
Version 1.4.0 puts Start and Stop where the hand already is — the quick settings shade and the app icon — and lets a marked point carry a photo and a voice, so what a corridor looked like leaves together with the numbers.
A tile in the shade
Start and Stop in the quick settings shade, within reach from any app and over the lock screen, where a widget cannot go. Over a secured lock it unlocks first — what it starts is location with a microphone. It measures with whatever the app measured with last, so one key never starts two different measurements.
Shortcuts under the icon
A long press on the app icon is the only control that is always on the home screen, so it offers the one thing that makes sense now: Start while nothing runs, Stop and Mark point once it does. The gate the launcher walks through is locked with a token no other app can read.
A photo and a voice at the point
A marked point can carry a photo taken through the app's own viewfinder, or a spoken note of up to ten minutes. The media never touch the phone gallery: they sit in the app's private storage and leave only through an export, which becomes a single tar.gz with a SHA-256 for every file.
Settings you can take with you
A new phone set up like the old one, without walking through two dozen sources by hand. Passwords go into the backup only if you ask, and only after a fingerprint, a face or the screen lock. The licence and the free hour never travel in it.
The data, open
to be looked at.
Version 1.3.0 puts the keys on the home screen, opens the measured rows inside the app, lets the controls be carried to the edge of the display, and starts reading sensors that are not in the phone at all.
Keys on the home screen
Three widgets that need no app opened first: a point mark with your own labels, a key that starts a saved set of sources, and a tile showing what one source is collecting. Each key keeps its own copy of what it starts, so a preset switched in the app later changes nothing on the home screen.
Rows you can read on the spot
Browse records opens the raw rows of the last measurement: filter by type and time, search the payload, and a sequence number that holds across the whole file. Marking and hiding is crossing out in the printout — the stored measurement and the export are untouched.
Keys carried to the edge
Hold Start, Reset or Stop and drag it to the bottom edge of the display; there it stays put while you scroll anywhere. Let go outside a berth and the key swings back with an overshoot as big as the distance it travelled.
Sensors that are not in the phone
BTHome, Ruuvi, ATC and pvvx, Eddystone telemetry. Read straight from the Bluetooth scan that is already running: nothing to pair, nothing to connect, no new permission. The values land named and in SI units, beside the bytes they came from.
A panel you can
put your thumb on.
Version 1.2.0 turns the screens into the front panel of an instrument. Switches light up as a whole, keys sink into their base under the thumb, and colour is left to mean a reading — everything else is grey.
Switches that light up as one
The switch is a rocker from a switchboard, cast from translucent red plastic. Switched on, the whole rocker glows instead of a dot in the corner; the I/O marking stays readable in both positions and the rocker always leans to the side that applies.
Keys that stand on a base
Start, stop and the export keys sit on their own base and a press sinks them into it, the same as the buttons here on the site. Haptics answer in the same order: a click going down, a quieter clack coming back.
Grey panel, colour that means something
The panel is neutral grey, so every colour on it is a reading: green for controls and for running, amber for warnings, red for stopping. A screen grid with divisions and dashed axes lies under the content.
Half the download
The release build is shrunk and optimised by R8, which took the bundle from 8.3 MB down to 4.3 MB, and the outdated library Google Play kept reporting is raised through the services that pull it in.
Edges instead
of pebbles.
Version 1.1.0 stops the app looking like a sketch. Shapes go to the right angle, measured values get a dial typeface, and selections become rows that say what each option means.
Sharp edges and a dial typeface
Cards, fields and buttons keep at most two pixels of rounding, and measured values are set in a face where every digit is the same width — a column of numbers no longer dances under the eye. Spacing sits on a four-point grid.
Rows with a description, not pills
Technologies, presets and targets are rows with the current value on the right. On a source with parameters, tapping the row switches it and the chevron opens its settings — a pill could not tell those two apart.
Units say what they changed
Switching units used to close the menu and leave no trace. The dialog now says what it switched to, where it shows up, and that the export stays in metres.
Out of testing,
into the world.
Version 1.0.0 is the first public release. The instrument itself is unchanged; what is new is that anyone can install it, try it for an hour before paying, and read the screens in their own language.
An hour of measuring, on the house
Every phone gets one hour of measuring time a year, split across as many measurements as you like — the tool is meant to be tried in the field, not from a screenshot. The remaining time and the date it comes back are shown right above the Start button.
Bought once, not rented
Unlocking is a single in-app purchase at the Google Play price for your country. No subscription, no expiry, and it follows the account onto every other phone you sign in to.
Permissions explained before they are asked
The first launch no longer opens with a stack of system dialogs. A screen says what each permission is for — and that location is what Android ties cells and Wi-Fi to — and the system asks only after you press the button.
Screens in your language
The app and this site speak a whole range of languages, chosen by the phone or set for Signal Collector alone. The export never follows: it stays in SI, UTC and English column names, so two files from two countries are still one dataset.
Ready for the world
and for the Store.
Version 0.10.0 completes the move to the production identity, adds full English and US units, closes the release blockers and gives the instrument a calmer, more precise visual system — without changing how it is operated.
English and Czech, neither one a bolt-on
Text is no longer produced inside the collection layer, and errors are no longer recognised by their wording. The language can be switched for the app alone, and an English phone never gets half-Czech screens. Numbers follow the locale; the export deliberately stays stable.
Metres, feet and miles
Units can follow the phone automatically, or be forced to metric or imperial in the settings. Only the screen and the notification are converted; the database and the scientific export always stay in SI.
A release with no silent traps
The production bundle requires the upload key, targets Android 16 / API 36 and carries the final identity app.signalcollector. Corrected permission checks close the crashes that followed a revoked permission, and the updated SSH client brings security fixes.
Around the globe
runs time itself.
Inside the globe sits only what has a bearing. Quantities without direction got their own bands outside the horizon, the operator composes the instrument themselves — and measured data can finally leave the phone by a route other than the share sheet.
Four quantities in the ring
Noise, temperature, pressure and now light. The angle along a band is time, not bearing — one minute split into seconds, so the head of the trace sweeps like a second hand with a gap behind it where values have aged out of the minute.
You compose the view
The middle button switches off whatever the cursor rests on. A switched-off row stays in the list with its value, only struck through: the filter changes the picture, not the measurement.
Data can leave on their own
The gear icon gained S3, WebDAV and SFTP destinations. Passwords are encrypted with a key from the Android Keystore, an address without https is rejected, and the server key fingerprint is verified.
You can see
where the signal came from.
The pulsing background circle gave way to a globe of the sky. Satellites sit where they actually are — and anything without a direction lights the whole ring instead of inventing a bearing.
Satellites in their real place
Android reports azimuth and elevation for GNSS only, and the app has recorded them since day one — there was simply nowhere to see them. Colour separates the constellation, size and brightness carry C/N0, a filled dot counts towards the fix. Verified on a Pixel 10a: 20 satellites from four constellations, 14 in the fix.
What has no bearing lights the whole horizon
Wi‑Fi gives strength, not azimuth; Bluetooth gives none either, and cells report only their identity. Samples without direction therefore ripple the entire ring rather than a sector — a sector would claim the signal came from there. The ripples also rotate, so not even the tallest of them points anywhere.
It tilts with the phone, not just turns
Lying face up it looks into the zenith, held upright it looks at the horizon — and what was near the horizon moves behind the phone. Collapsed, the card leaves a flat compass with a needle to north: calm, no flicker.
Scrolling that
never jumps away.
While hiding, the header used to take part of the gesture for itself and the content was re-measured under the finger. Now it only observes the scroll and takes nothing from it.
Content follows the finger the whole time
The finger used to drag while the page stood still until the header had collapsed — and on reversing direction it expanded again first. The header now sits above the content and takes no part in scrolling; it simply moves away, taking the status row with it.
Nothing is re-measured mid-scroll
It hides by offsetting at draw time, not by changing its height, so the content inset stays constant. Measured on a Pixel 10a: 0.30 % janky frames and no missed vsync across ten drags over the threshold where the header switches.
It returns the moment you pull down
Direction decides, not position — you do not have to scroll back to the top to get the header. Because it also returns mid-page, it got an opaque backdrop; otherwise the title would sit on top of the card text.
A scan that does not
pretend to be a measurement.
Android throttles Wi‑Fi scans and keeps handing back the same result meanwhile. The app used to write it down again and again — and the export then claimed a measurement every five seconds.
A repeated scan is recognisable
Every attempt records the state FRESH, THROTTLED or UNCHANGED together with the age of the result; per-AP records are written only for a fresh scan. Without that, the data could not tell you where measuring actually happened — and for a coverage map, that is the whole difference.
Six times denser sampling
Measured on a Pixel 10a: with throttling on, 70 rejected attempts against 45 fresh scans; with it off, zero rejections and a fresh scan every 4.2 s at the median. At walking pace that is one sample every 6 metres instead of every 40.
Points on a floor plan, throughput per network
GPS gives no position indoors, so a place marker was added — you stop, mark a point, walk on. And a new optional source visits the Wi‑Fi networks you list one by one and measures their actual throughput, not just their signal.
Every second
gets its own row.
Continuous internet measurement no longer leaves holes in the timeline. When measuring is impossible, the reason is written down — and a Wi‑Fi network that is gone is recognised at once, not ten minutes later.
A second without a measurement is still a row
A capacity burst or a manual speed test holds the link for several seconds, and the data used to be left with a gap — a full minute in the worst case. Now it says BUSY, naming who held the link. A missing second cannot be told apart from a failed measurement; a written one can.
A dead Wi‑Fi is recognised immediately
After losing Wi‑Fi, the app stayed bound to a network that no longer existed, and over six hundred samples claimed the internet was not answering. The handle is now dropped as soon as the system stops knowing about it, and the app waits for a new Wi‑Fi with internet.
A sample knows which Wi‑Fi it came from
SSID and BSSID were added to the quality record — until now only the direct Wi‑Fi source knew them, and measured quality could not be tied to a network. Android placeholder values (RSSI −127, frequency −1) are also left empty instead of looking like readings.
From your pocket you can tell
how the run is going.
The notification for a running measurement no longer just says “collecting data”. It shows the duration and the record count, refreshes every five seconds and speaks up when data stops being stored.
Time and count in the notification
On a dark screen you see 00:02:43 · 29,880 records instead of a terse line. The duration is pure collection time, the same as on the status card — a pause between Stop and Start does not count towards it.
Data loss reports itself
As soon as samples are dropped, their count joins the line, and the title changes when writing stalls or fails. It is the one thing worth reporting before the operator looks at the screen again.
Ready for Live Updates
The notification declares itself to the system as a Live Update — Android's counterpart to the iOS Dynamic Island, a strip inside the status bar itself. On the Android 16 build under test it does not render yet, because that part of the system is not switched on; the app is waiting for it, ready.
The colour tells you
what was just captured.
A wave crosses the background every time something is written — and now in a colour that says where the sample came from. From across the desk you can see not only that data is flowing, but what is being heard right now.
A colour per source
Green is sensors, blue networks, amber GNSS and violet Bluetooth. Sensors run at 50 ms, so green is a continuous swell with the other colours flashing through it — a blue flash is a network scan, a violet one Bluetooth.
The wave keeps off the text
It used to be drawn over the content as well, tinting the title in the header, the messages and the status row. Now it sits at the very bottom: it passes under the header but leaves the type alone.
Content runs under the bars
When the header hides on scroll, the cards continue under the status bar instead of stopping at it and leaving an empty strip above. The wave shows through under the bars too.
Start no longer overwrites
work in progress.
Start resumes the last measurement instead of quietly replacing it with a new one. Beyond that, the phone lets your pocket know when the connection drops or data stops being stored.
Start continues, it does not restart
Until now every Start opened a new measurement and the previous one became unreachable — it stayed in the phone, but only the new one could be exported. Now it continues, and a clean slate comes only from Reset, which deletes the previous measurement.
A pause does not count towards the duration
The duration is the sum of the time actually spent collecting, not the span from the first Start to the last Stop — for a run interrupted overnight that would claim fifteen hours of collection. In the export it is running_ms.
Interruptions are in the data
Every stop and every resume adds its own session record with a timestamp. The data therefore shows when collection ran and when it waited, so a pause is not mistaken for a hole in coverage.
A buzz at a hole in coverage
Losing the connection is a soft thud, regaining it two light taps, a failed write three firm knocks. The phone is in your pocket while you walk, and these are the events the screen cannot tell you about. Every buzz goes into the data as haptic, so a window can be cut around the vibration.
The counter runs live
The count is no longer sampled. At two thousand records per second it used to jump by more than five hundred; now it flows, and only the digits slow enough to read are animated. The figures have fixed slots and sit on the baseline.
A panel instead of a form
Start, Reset and Stop are solid colour fields — an unavailable switch turns translucent but keeps its colour. Export got its own plate with a label on which the size of the pending file grows, and a green wave crosses the background with every written sample.
How much ground
we actually covered.
This version adds distance walked next to the duration, in a way that does not credit metres to a phone lying on a desk. Beyond that, the capacity burst shows its progress and technology selection is driven by presets.
Distance walked, in metres
The status card shows Distance instead of a static source count. The value is stored with the session, so a finished measurement still shows it after an app restart, and in the export it is distance_m.
Metres, not GPS noise
A walker covers about 1.4 m between one-second fixes, while the uncertainty of a single fix is usually larger. Distance is therefore not measured between neighbours but by moving an anchor once it passes the threshold max(3 m, accuracy).
Location accuracy on show
The accuracy of the last fix sits under the metrics. When the position is too coarse to count towards distance, the card says so outright, so a number that will not move has an explanation.
The capacity burst shows its progress
A new record for the start of a burst puts its beginning into the data, not only its result. Meanwhile the UI runs a countdown next to the transport, and a burst interrupted by Stop is not left hanging.
Technology presets
“All” and “Clear all” became a single switch, with Default in front of it. The app recognises hand-tuned sensor values, asks before overwriting them and offers to keep them as the Custom preset.
Legible messages
A dark treatment tinted by message type, dismissible by dragging down. An error stays on screen for 15 seconds, an ordinary notice disappears after four.
Internet mapping
while moving through a building.
Continuous transfer mapping got its own card ahead of Start, a heartbeat began watching collection from the inside, and a code audit cleaned up the bindings to Android callbacks.
A card of its own for mapping
A separate card keeps continuous mapping apart from the one-off speed test. It can measure Wi‑Fi, cellular data or both transports at once over a specific Android Network.
A data estimate up front
The interface shows the upper bound before you start: at most 204 MB per 30 minutes for one transport and 407 MB for both.
A heartbeat over collection
A running check of the collectors, the writer and the write queue. The session then distinguishes an ordinary Stop, a writer failure and an interruption after the process died.
The export admits its gaps
The header carries the last stored timestamp, the trailing gap and the counts of accepted, written and dropped samples.
Audited callbacks
Registrations for GPS, GNSS, NMEA and navigation messages are visible in the export itself. Bluetooth Classic stores the states of the discovery cycle as well as the devices actually found.
Fixes from the code audit
The duration of a finished measurement is computed from stored timestamps, stopping the mapping leaves no NetworkCallback hanging, and sensors deliver data on their own thread.
Maintenance that
stops dropping samples.
No new measurement feature. A version born from a code audit, fixing the reliability of collection, writing and export, and moving the format to V3.
Dropped samples on show
When writing falls behind, the count appears in the app and goes into the header as dropped_samples. Samples used to vanish unannounced; ending a measurement no longer loses the last of them either.
Ranges hold
A setting outside the allowed range is pulled back into it, so a zero interval no longer spins a scan with no pause.
A disabled Bluetooth is recognised
With the adapter off, the sources are not marked as measured and ADAPTER_DISABLED goes into the export instead of a blank.
Collection off the main thread
The GNSS, location, Wi‑Fi RTT and cellular callbacks run aside, so raw GNSS no longer slows the controls. The microphone is released only after the read completes.
Format V3
SIGNAL_COLLECTOR_TXT_V3 adds the dropped_samples header and drops the source_timestamp_ns column, which only duplicated elapsed_realtime_ns.
Schema 2 without losses
The database moves by migration and existing measurements survive. Temporary files created for sharing are cleaned up, so the cache no longer grows by a whole measurement.
Transfer quality,
measured continuously.
Alongside the one-off speed test there is now a per-second stream of samples of real download, upload and RTT — bound to a specific network and enriched with radio context.
A sample every second
The measurement runs from Start to Stop and produces roughly one network_quality_sample per second.
What a sample holds
A 64 KiB download, an 8 KiB upload and three small HTTPS RTT probes. The output carries the real transfer times, short-term throughput, RTT min/avg/max, jitter, errors and timeouts.
Capacity burst
Every 30 seconds a network_capacity_probe is produced with a 1 MiB download and a 128 KiB upload.
Forced transport
The test can be sent over a specific Wi‑Fi or cellular Android Network, even when both are available at once.
Radio and location with the sample
Every sample carries the last Wi‑Fi or cellular radio context and the last known location, including its age.
Quality, not a record
The small samples are labelled as measurements of quality over time, not of maximum internet speed. The server layer supports the CLOUDFLARE, CUSTOM and LOCAL modes.
Controls that
stay where they are.
A small interface release. Actions no longer move with the state of the measurement, the top bar gives room to the content, and a message can be dismissed when it is in the way.
Download and Share stay put
The buttons keep their place. Without a finished measurement they are dimmed and inactive, not hidden.
A vanishing top bar
It hides when you scroll down and comes back when you scroll up.
Recommend from the bar
Prepares a new e‑mail with no recipient filled in, carrying a subject, a message and links to the app.
Dismissible messages
Status notices are a bottom message that can be closed; otherwise they disappear on their own after a longer interval.
The storage note moved down
The note about local data storage now sits at the very bottom, visually subdued.
Active scan
and a measured speed test.
This version introduces an experimental active cellular scan with an exact reason for refusal, and a full speed test bound to the transport actually chosen.
Active scan events
Unambiguous ACTIVE_NETWORK_SCAN_REQUESTED, STARTED, RESULT, COMPLETE and FAILED instead of guessing support from the phone brand.
The exact reason for refusal
A failed scan stores the numeric code, the exception type, the message, the carrier privileges state and the state of the MODIFY_PHONE_STATE permission.
Kept apart from passive cells
The result carries scan_mode=ACTIVE_NETWORK_SCAN and only the operator Android supplied; an unknown one stays UNKNOWN.
A test over the chosen transport
Manually over MOBILE, WIFI or sequentially BOTH, with the traffic genuinely bound to the requested Android Network. The options offered follow the validated networks available.
A complete test summary
speed_test_result carries download and upload in Mb/s, bytes and times, the minimum, mean, median, maximum and p95 RTT, jitter, packet loss, errors and the server — together with the last cell or Wi‑Fi context.
Collection that survives
The measurement continues in the background through a foreground service, preferences survive a restart, and from an estimated 10 MB upwards the export preselects GZIP.
Cài đặt
Cài đặt qua
chỉ Google Play.
- 1
Cài từ Google Play — không cần lời mời, không danh sách người thử, không phải chờ.
- 2
Đo tới một giờ mỗi năm mà không trả gì.
- 3
Mở khóa đo không giới hạn ngay trong ứng dụng khi một giờ không còn đủ.
Google Play là kênh phân phối duy nhất: nó ký chuỗi cập nhật và không có tệp APK trực tiếp ở bất kỳ đâu. Bản thân ứng dụng chạy mà không cần tài khoản nào của chúng tôi và không cần máy chủ nào của chúng tôi.
Bản dùng thử, giá và hỗ trợ
Một giờ mỗi năm
để bạn quyết định.
Không thể đánh giá một thiết bị đo qua ảnh chụp màn hình, nên Signal Collector trao cho mỗi chiếc máy một giờ thời gian đo mỗi năm — đủ để đi hết một tuyến, nhìn vòng tròn đầy dần và mở bản xuất. Giờ đó tính theo thời gian đo, không theo số lần chạy, nên có thể dùng ở nhiều nơi trong nhiều ngày. Khi hết giờ, mở khóa là một lần mua trong ứng dụng theo giá Google Play tại nước bạn: không thuê bao, không ngày gia hạn, và nó theo sang mọi chiếc máy đăng nhập cùng tài khoản.
Phản hồi đi qua phần đánh giá trên Google Play; mỗi đánh giá mới được tiếp nhận trong vòng một ngày, chuyển thành một vấn đề và được trả lời, còn bản sửa đi cùng bản cập nhật kế tiếp. Ứng dụng trả phí không mang quảng cáo, không phân tích hành vi và không có SDK bên thứ ba nào bên trong phép đo — thay vào đó, chính giá bán trả cho việc phát triển.
Ứng dụng thực sự thu những gì
Từ cảm biến vật lý
đến những mạng quanh bạn.
Mỗi nguồn có thể bật hoặc tắt riêng trước một phép đo, và với một số công nghệ còn đặt được cả chu kỳ.
Mạng di động
Cell phục vụ và cell lân cận, tham số LTE/NR/3G/2G, các thay đổi đăng ký và phép quét chủ động thử nghiệm.
GNSS và vị trí
GPS 1 Hz, vệ tinh, phép đo GNSS thô, đồng hồ, AGC, bản tin dẫn đường, NMEA và thông tin ăng-ten.
Wi‑Fi và RTT
Kết nối hiện tại, các AP lân cận, MLO của Wi‑Fi 7, năng lực và khoảng cách RTT/FTM tới những điểm truy cập có hỗ trợ.
Bluetooth
Việc dò thiết bị cổ điển và tải quảng bá BLE, gồm cả dữ liệu nhà sản xuất và dữ liệu dịch vụ.
Cảm biến và tiếng ồn
Chuyển động, từ trường, áp suất, ánh sáng, tiệm cận, vector xoay và mức dBFS tham khảo, không lưu âm thanh.
Mạng và truyền dữ liệu
Mẫu mỗi giây của tải xuống, tải lên, RTT, jitter và số lần quá hạn thực tế, các đợt dung lượng 30 giây, và việc gắn đồng thời vào một mạng Wi‑Fi và một mạng di động cụ thể.
SIM và eSIM
Khe cắm, nhà mạng, MCC/MNC, chuyển vùng và thẻ nào mang dữ liệu — bản thân các cell chỉ nói lên trạm phát, không nói ai đang nhìn nó. Không ghi ICCID lẫn EID: đó là những số thuê bao cố định, tồn tại lâu hơn cả một lần đổi máy.
Cảm biến ngoài
Cảm biến không nằm
bên trong máy.
Máy đo được những gì nó với tới. Một đầu dò trên tường, một đồng hồ đo nối cáp, một máy thu trên mái — những thứ đó phải vào bằng đường khác. Có bốn đường vào, và đường đầu tiên đã chạy.
Cảm biến phát quảng bá · đã chạy
BTHome, Ruuvi, ATC và pvvx, telemetry Eddystone. Không phải ghép đôi và không phải kết nối: cảm biến gọi số đo của nó ra không gian và phép quét đang chạy sẵn nghe thấy. Nhiệt độ, độ ẩm, áp suất, CO₂, bụi mịn, điện áp — có tên gọi, theo đơn vị SI, trong cùng một tệp với mọi thứ khác.
Hồ sơ Bluetooth LE · dự kiến
Environmental Sensing tự mô tả các phép đo của nó, nên một đồng hồ đo chưa ai từng nghe tên vẫn đọc được kèm đơn vị. Bên cạnh đó là các hồ sơ chuẩn — pin, nhiệt kế, vị trí — và dịch vụ Nordic UART, thứ mà một đầu dò tự chế dùng để nói chuyện.
Đường nối tiếp qua cáp · dự kiến
CDC-ACM, FTDI, CP210x, PL2303, CH340. Năm họ chip phủ gần như mọi thứ cắm vào USB mà không phải ổ đĩa: bo Arduino và ESP32, máy thu u-blox, máy phân tích phổ, các đồng hồ đo trả lời bằng SCPI.
Thiết bị trong mạng nội bộ · dự kiến
Được tìm qua mDNS, đọc qua HTTP hoặc như một luồng TCP thuần. Yêu cầu được gắn vào mạng Wi-Fi nên nó không đi ra qua dữ liệu di động rồi lạc đường tới một máy chỉ cách một phòng.
Không có gì được đoán. Số đo mà chính cảm biến đánh dấu là không hợp lệ sẽ bị bỏ ra thay vì ghi thành một con số, tải mã hóa được ghi là đã mã hóa chứ không giải thành chuyện bịa, và định dạng mà ứng dụng không biết vẫn nằm trong tệp dưới dạng byte thô. Các khóa được liệt kê trong từ điển dữ liệu.
Điều khiển ngoài ứng dụng
Một phím không cần
mở ứng dụng trước.
Đo ngoài hiện trường nghĩa là một tay cầm máy, tay kia bận việc khác. Vì thế mọi điều khiển quan trọng đều có chỗ bên ngoài ứng dụng, và mỗi cái gửi đúng lệnh mà màn hình gửi.
Bảng đo
Một tiện ích khởi động bộ nguồn và các chu kỳ đã lưu trong nó. Khi đang chạy nó nói rõ điều đó, mang theo các con số của phép đo, và lần chạm thứ hai sẽ hỏi lại trước khi dừng. Phím giữ bản sao riêng của thứ nó khởi động, nên đổi bộ chọn sẵn trong ứng dụng sau này không lặng lẽ đổi những gì màn hình chính đo.
Đánh dấu điểm
Tối đa bốn nhãn của riêng bạn nằm cạnh nhau — ô cửa, góc, cửa sổ mỗi cái một chạm, ghi thẳng vào điểm. Khi không có gì chạy, phím vừa khởi động phép đo vừa đánh dấu điểm trong một lần.
Ô nguồn
Một nguồn dưới dạng một con số lớn: số điểm truy cập trong tầm, số vệ tinh trong định vị, độ ồn. Chạm khi không có gì chạy sẽ bắt đầu một phép đo chỉ với nguồn đó.
Bảng đọc nguồn
Tối đa sáu nguồn, mỗi nguồn một dòng, theo thứ tự bạn đã chọn — một danh sách để đọc lướt thay vì phải tìm.
Ô trong cài đặt nhanh
Bắt đầu và Dừng từ mọi ứng dụng và cả trên màn hình khóa. Nó đo bằng đúng những gì ứng dụng đã đo lần gần nhất. Trên màn hình khóa có bảo vệ, nó yêu cầu mở khóa máy trước: thứ được khởi động là vị trí kèm micrô.
Lối tắt dưới biểu tượng
Nhấn giữ biểu tượng ứng dụng sẽ đưa ra Bắt đầu khi chưa có gì chạy, và Dừng cùng Đánh dấu điểm khi đã có. Điểm được đánh dấu mà không có nhãn — nhãn nằm trên phím tiện ích, nơi có chỗ cho chúng.
Thông báo
Khi đang đo, nó mang theo thời lượng, số bản ghi và quãng đường đã đi, bên dưới là Đánh dấu điểm và Dừng. Bắt đầu có thể ở lại bảng thông báo suốt lúc không có gì chạy, nên đo theo từng đoạn không có nghĩa là phải tìm lại ứng dụng mỗi lần.
Các phím được chính phép đo vẽ lại, năm giây một lần — một tiện ích không thể mới hơn ứng dụng nuôi nó. Vì thế mỗi phím mang theo thời điểm số liệu của nó được đọc; đồng hồ bấm giờ là ngoại lệ, nó tự chạy. Tất cả được thiết lập ở một chỗ, Phím trên màn hình chính trong menu cài đặt, và được mô tả trong trợ giúp.
Kiểm chứng hiện trường, 10 tháng 8 năm 2026
Dữ liệu từ một chiếc máy
thật.
Mọi thứ bên dưới được đo trên một chiếc Google Pixel 10a chạy Android 16. Ở phiên bản 0.7.2, một phép đo duy nhất chia làm ba chặng đã thu 87 597 bản ghi: thời lượng tăng từ 2:49 qua 7:21 lên 8:12, số hiệu phép đo không hề đổi, và hơn hai mươi phút nghỉ giữa các chặng không được tính vào thời lượng. Các con số quãng đường đến từ một lần chạy chín phút của phiên bản 0.7.1 trên cùng chiếc máy — bộ lọc quãng đường không đổi kể từ đó.
274 lần định vị đầu tiên có độ chính xác từ 9 đến 114 m. Cộng khoảng cách giữa các lần định vị kề nhau sẽ ra 429 m, hoặc 28 m sau khi lọc bỏ các lần định vị thô; dời mốc neo qua ngưỡng thì ra không. Máy thử nghiệm không có SIM nên nhánh di động của việc lập bản đồ đã báo đúng rằng mạng không khả dụng.
Phiên bản và tài liệu
Cài đặt, thay đổi
và mã nguồn.
Kho mã vẫn ở chế độ riêng tư. Cộng tác viên đã đăng nhập sẽ tìm thấy mã nguồn, các bản phát hành đã gắn thẻ và mã kiểm tra APK trong đó.
Quyền riêng tư
Dữ liệu đo không bao giờ rời khỏi máy.
Ứng dụng chạy ngoại tuyến và không chứa SDK phân tích, quảng cáo, quy kết nguồn cài hay báo lỗi sập — và sẽ không thêm cái nào. Mọi thư viện mà ứng dụng được dựng từ đó đều được nêu tên trong chính sách quyền riêng tư, mỗi thư viện ghim vào một phiên bản chính xác, nên bên trong không có gì đổi mà không có một bản phát hành nói rõ điều đó. Phần lập bản đồ liên tục chất lượng truyền, vốn là tùy chọn, dùng các điểm cuối Cloudflare Speedtest công khai cho những lần truyền thử HTTPS nhỏ và các đợt định kỳ; đó không phải phép đo tốc độ Internet tối đa. Mô-đun này mặc định tắt. Nếu bạn mua bản mở khóa, một báo cáo giao dịch rời khỏi máy và nó không mang dữ liệu đo nào; điều này được mô tả trong chính sách quyền riêng tư. Một bản xuất có thể chứa dữ liệu vị trí nhạy cảm và định danh của các mạng lân cận.
Cách hoạt động
Từ một cảm biến
đến một dòng trong tệp.
Mỗi nguồn chạy theo nhịp riêng. Một mẫu được đóng dấu thời gian và vị trí biết được gần nhất, đi qua một hàng đợi không chặn rồi được lưu theo lô vào cơ sở dữ liệu cục bộ. Các khóa gạch chân trong sơ đồ dẫn tới từ điển dữ liệu.
Cài đặt thu dữ liệu
Đúng những tham số mà ứng dụng đưa ra cho từng nguồn trước khi một phép đo bắt đầu. Các khoảng giá trị và ước tính dữ liệu khớp với phần triển khai; một thay đổi sẽ hiện ngay trên sơ đồ phía trên.
Khoảng 10–1000 ms
Khoảng 100–60000 ms
Khoảng 5–300 s
Khoảng 5–60 s
Khoảng 5–300 s
Lập bản đồ InternetMạng dùng cho đo liên tục
Khi chọn cả hai, hai đối tượng Android Network riêng biệt cùng chạy một lúc.
Khoảng 500–5000 ms
Khoảng 1–1024 KiB
Khoảng 1–256 KiB
Khoảng 10–300 s
Khoảng 64–10240 KiB
Khoảng 8–2048 KiB
Ước tính này là cận trên: trên đường truyền chậm, một mẫu mất nhiều thời gian hơn nên số mẫu vừa trong cùng khoảng thời gian ít hơn và lượng dữ liệu truyền cũng ít hơn. Đây không phải phép đo tốc độ tối đa — vì sao.