Skip to content
BrickyStudiosPublic

About

Passive Wi-Fi & Bluetooth scanner for Android and GrapheneOS: AirTag tracker detector, hidden camera finder, car mode with map and speed camera alerts, Wi-Fi channel tips. English + German, open source.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Funkblick: Wi-Fi and Bluetooth radar for Android. Phone showing the radar with networks and Bluetooth devices around it

Funkblick: Wi-Fi and Bluetooth scanner for Android with tracker alerts, hidden camera finder and car mode

Passive Wi-Fi and BLE radar for Android and GrapheneOS. Shows every network and Bluetooth device your phone can hear, looks up the maker, warns when an AirTag or other tracker follows you or a camera runs its own Wi-Fi, and has a car mode with spoken alerts. No root, no account, English and German.

Made with Kotlin
Android 8.0 or newer Runs on GrapheneOS without Google services Jetpack Compose Detects AirTag, SmartTag, Tile, Chipolo, Google Find My English and German No tracking Tests License GPL-3.0 Last commit

Download Funkblick.apk Website

Install · What it does · Car mode · Limits · Build · Deutsch

Your phone hears dozens of radios all the time: routers, hotspots, earbuds, watches, cars, cameras. Android keeps that to itself. Funkblick puts it on a radar, looks up who built each device in the IEEE registry, reads what Bluetooth devices broadcast about themselves, and tells you why it put something in a category. When something deserves attention it plays its own sound and says what it is.

It started as an open-source answer to SØPHIA Android, a paid scanner sold on Gumroad, and grew a few things that matter in Germany: tracker protection, cameras in holiday flats, Wi-Fi channels by EU rules, and a car mode that is honest about § 23 StVO.

Map of a demo drive through Hamburg: the route, devices placed along it and a tracker warning Notable devices: an AirTag away from its owner for 14 minutes, a Samsung SmartTag and a Tile Detail of a body cam access point marked probably police, with the evidence behind it

Car mode: 48 km/h, a 50 km/h speed camera 350 m ahead, counters and spoken alerts Discreet mode: a plain light street map with only your own position

Screenshots from the built-in demo with invented surroundings.

Install

  1. Download Funkblick.apk on your phone and open it. Allow installs from your browser if Android asks.
  2. Open Funkblick, tap Start scan, allow location and nearby devices. Android only hands out Wi-Fi results to apps with location permission.
  3. To look around before scanning, tap open the demo.

Android 8.0 or newer on a 64-bit ARM phone. No Google Play services needed, so it runs on GrapheneOS, CalyxOS, LineageOS and Huawei phones. Funkblick checks GitHub Releases on start and installs new versions with one tap. Obtainium works too.

What it does

Radar Every Wi-Fi access point and Bluetooth LE device in range. Distance from the centre is signal strength, circle = Wi-Fi, square = Bluetooth, colour = kind.
Maker lookup 54,000 prefixes from the IEEE registry (MA-L /24, MA-M /28, MA-S /36, longest wins), plus Bluetooth company ids. Random addresses are marked as random instead of guessed.
Categories Tracker, possible public safety gear, camera, vehicle/cellular router, car (infotainment Wi-Fi like "My VW 1013" or "Audi_MMI"), public Wi-Fi, business network, home router, phone/watch/headphones, unknown. Each with the evidence behind it: registry, maker signature, payload, name, your rule.
Map OpenStreetMap vector map (OpenFreeMap, MapLibre) in the night palette: your track, fixed speed cameras (with traffic alerts on), traffic cameras and counters, alerts and where fixed devices probably are, estimated from signal strength along the way. Bundled into numbers until you zoom into a street. All devices adds everything the radar hears as hollow rings around you, distance from signal strength, direction made up (car mode stays simple without it). The area around you can be saved for offline use.
Probably police Evidence instead of a hunch: Axon gear over Bluetooth (NRW police wear Axon body cams), a vehicle that comes along while public safety gear is in range, a following Ford or Mercedes in NRW (the patrol fleet) as "possible". Saw it was police? "Mark as police" on the device, and from then on it counts as probably police. Vehicles, routers and tags seen on an earlier day are recognised ("seen before on 08.11.").
Navigation Turn-by-turn in car mode and discreet mode, so no second nav app has to run alongside: search a place (Photon, komoot), the route comes from FOSSGIS Valhalla (OpenStreetMap Germany), a banner shows the next turn, the distance and when you arrive, and a Piper voice says "In 300 metres, turn right" in English or German. Leave the route and a new one comes within 15 s. ⌂ next to a search result saves it as home, then Home in car mode is one tap; it stays on the phone (no backup, never in a log). Traffic alerts are for passengers only (see Car mode and the law). With them on and a route set, the speed camera warning counts only cameras at the road ahead and gives the distance along the road. Both servers learn start and destination; Funkblick keeps neither, not in logs, not in exports. Off with "Load map data from the network". There is deliberately no option to route around speed cameras, cameras or police.
Discreet mode A light, ordinary-looking map with only your position and, if you set one, your route. No radar, no colours, notifications say only "Funkblick", alerts come through headphones. Tap three times to leave.
Rules Watch or mute by address, maker prefix, exact name, name contains, maker contains. Mute always wins. Stored on the phone.
Alerts Own signal per kind plus a spoken line (Piper TTS, English and German). Only fresh sightings ring, cached scan results never do, 5 minutes cooldown per device. Music ducks like it does for navigation.
Setup check On start, a checklist of every permission and switch the scan needs (location, nearby devices, notifications, Wi-Fi, Bluetooth, battery optimization), each with a button that opens the right Android screen.
Find mode Pick a tracker or camera and walk towards it: big smoothed signal meter, warmer/colder, a beep that speeds up as you get closer.
Home watch Remember a place (home, a holiday flat) by the Wi-Fi networks that are always there, then hear only what is new there: a camera, a stranger's tag that stays, a device right next to you. Your own cameras stop ringing at home. No coordinates are stored, the place never goes into a log or export.
Hacking tools Warns about a Flipper Zero, a WiFi Pineapple, an ESP deauther, the cheap Bluetooth modules card skimmers are built from, a Bluetooth spam attack (a flood of fake pairing pop-ups) and an evil twin: the same Wi-Fi name from two makers, one open, one protected. Signatures after SquachWatch and RF Sentinel (both GPL-3.0).
Car start Quick settings tile to start or stop scanning. Optional: when the phone connects to a car's Bluetooth, one tap on the notification opens car mode.
Trip review After you stop: time, distance, devices per km, share of open Wi-Fi, car Wi-Fis, vehicles that came along, the most common makers and every alert in order. Your own car and phone are left out.
Logs and export Every session as JSON on the phone, written every minute, copied to Downloads with one tap. Export CSV, JSON, GPX (opens in Organic Maps), GeoJSON or an AI debrief to paste into ChatGPT, Claude or a local model.
Log viewer brickystudios.github.io/funkblick/viewer opens a shared JSON or GeoJSON export in any browser, iPhone included: map, notable devices, alerts. The file stays in the browser.
Diagnostics Wi-Fi scans requested and throttled, BLE state and adverts, GPS fixes, sounds played, build id.

Tracker protection

AirTag and other Apple Find My accessories, Samsung SmartTag, Tile, Chipolo, Pebblebee and tags in Google's Find My network. Funkblick reads the payload, so it can tell a tag next to its owner from one on its own, and warns when a separated tag has been with you for ten minutes without a five-minute gap. With GPS it also has to come along to three places at least 300 m apart, like AirGuard does, so a lost tag next door or a stranger's bag on the train stays quiet. Find mode then leads you to it. Formats as documented by the AirGuard research project at TU Darmstadt. The More page has German help numbers: police 110, violence-against-women helpline 116 016, Weisser Ring 116 006.

Hidden cameras

Camera makers (Hikvision, Dahua, EZVIZ, Axis, Ring, Arlo, Wyze, Reolink, Mobotix …) and Wi-Fi names cameras use when they open their own network (V380, IPC, LookCam, HDLiveCam …).

Channel tips

Counts the networks per channel, weighs them by signal and suggests the quietest 2.4 GHz channel out of 1, 6, 11 and 13 (EU) and the quietest 5 GHz channel, preferring channels without DFS.

Car mode and the law

Full screen: the map on two thirds, below it big speed, distance to the next fixed speed camera with its limit, counters for vehicle routers, possible public safety gear, trackers and cameras, the last alerts, screen stays on. Speed cameras are 5,192 fixed cameras in Germany from OpenStreetMap, bundled in the app, so your position never leaves the phone. A button refreshes them for your region; that sends a box of about 130 km around you to OpenStreetMap's Overpass server and nothing else. A button opens the official Blitzer.de app for mobile cameras. The map also shows traffic cameras, number plate scanners and traffic counters within 5 km, 3,791 points across Germany mapped in OpenStreetMap (surveillance:zone=traffic, surveillance:type=ALPR, monitoring:traffic=yes), bundled the same way. A GitHub Action rebuilds speed and traffic camera files from OpenStreetMap every Monday, and the app fetches them once a week: one file for all of Germany, so no position is sent. Live camera pictures are not included: the Autobahn GmbH stopped publishing its webcams, and other camera maps are their own databases.

Car mode also counts vehicles that come along: a car's Wi-Fi seen at three places over four minutes gets reported as "a vehicle has been with you for minutes". Your own car is recognised by being there from the start with a strong signal and never counts. This came out of the first test drives, where a "My VW" hotspot stayed behind us for six minutes.

All of this is off by default. Turning it on shows a warning first: German law (§ 23 Abs. 1c StVO) forbids drivers to use functions that point out traffic enforcement, 75 € and a point, also when a passenger's phone warns for the driver. Switzerland bans speed camera warnings altogether. Funkblick is meant for the passenger seat.

While the car moves, typing a destination asks first whether you are the passenger, once per drive. Home stays one tap.

"Possible public safety gear" means a body cam or vehicle maker (Axon, Motorola Solutions, WatchGuard, Getac …) showed up in Wi-Fi or Bluetooth. Vehicle routers (Cradlepoint, Sierra Wireless, Teltonika, Inseego …) sit in police cars, but also in buses, ambulances and delivery vans. A maker match only tells you who built the hardware. Axon gear is also recognised behind a random Bluetooth address, by its "BWCDEVICE" tag and its Axon/TASER service ids; camera glasses (Ray-Ban Meta, Spectacles, Vuzix) and drones sending Remote ID count as cameras. These signatures follow RF Sentinel (GPL-3.0), which has more of them, and the all-cameras-are-beacons reference (Apache-2.0).

Sound in the car, Android Auto

Alerts play as navigation prompts, so music ducks and they take the same route as your navigation voice. With Android Auto connected they come out of the car speakers. Over plain Bluetooth the car has to be on its Bluetooth or phone audio source; while it plays its own radio, many cars (BMW included) drop phone audio.

Funkblick does not show up on the Android Auto screen yet. Android Auto only runs car apps installed from Google Play, and a GitHub APK would need workarounds like UnknownAuto. Until then: phone in a mount, car mode open, screen stays on.

What it can't do

  • No direction. A phone measures signal strength, not direction. The angle on the radar is just a stable spot per device.
  • Access points only. Android lists routers and hotspots, not devices that are merely connected to one. A camera on the host's home network is invisible to any app.
  • No police radio. Police and EMS use TETRA (Germany) or P25 (US). No phone can receive that.
  • Android throttles Wi-Fi scans to 4 per 2 minutes. Funkblick asks every 10 seconds, which pays off once you switch off "Wi-Fi scan throttling" in the developer options. With the screen off, Android pauses unfiltered Bluetooth scans, so Funkblick then only listens for trackers and watched addresses.
  • No beeping trackers. Making a tag play a sound needs a Bluetooth connection, and Funkblick never connects to anything.

Roadmap

Done in 1.1 to 1.5: find mode, the tracker rule with places, quick settings tile and car start, speed camera refresh, the setup checklist, logs to Downloads, the car category, vehicles that follow you, the map with device positions, probably police, discreet mode, GPX/GeoJSON, a calmer design with three tabs, the trip review, the web log viewer, marking a device as police.

Next:

  1. Home watcher: a new camera, tracker or strong device at home gets a notice.
  2. What's on air here: fixed devices from several drives on one map, more exact with every drive.
  3. Android Auto screen, once there is a way that does not depend on Google Play.

Privacy

Scans, rules, logs and the home watch stay on the phone. Android backups and transfers to a new phone leave all of it out. Logs and exports never contain your saved Home or a navigation destination. Funkblick makes these network requests, and each one sees this much:

  • Update check: GitHub's Releases API, no position.
  • Camera data, once a week: one file for all of Germany from GitHub, no position.
  • Map tiles: OpenFreeMap sees roughly where you are.
  • "Refresh speed cameras for this region": Overpass gets a box of about 130 km around you.
  • Place search: Photon (komoot) gets the search text and your position to about 1 km.
  • Routes: FOSSGIS Valhalla gets your exact start and the destination.

"Load map data from the network" switches off the tiles, the refresh, search and routes. Safe mode, on by default, shortens addresses in exports and logs to the maker part plus a hash, hides the names of home networks and phones, and rounds positions to about a kilometre. A second switch does the same on screen, for screenshots.

Build it yourself

./gradlew testDebugUnitTest assembleDebug    # JDK 17, Android SDK 35

The classification logic in core/ has no Android types and is covered by unit tests: tracker payloads, registry lookups, categories, rules, alert freshness and cooldown, the 10-minute rule, channel tips, CSV/JSON escaping, speed camera distance and heading.

Data files are generated, not hand-written:

File Script Source
app/src/main/assets/oui.txt tools/build_oui.py IEEE Registration Authority (MA-L, MA-M, MA-S)
app/src/main/assets/speedcams.tsv tools/build_speedcams.py OpenStreetMap via Overpass, ODbL
app/src/main/assets/sounds/ tools/build_sounds.py synthesized tones, Piper TTS voices Thorsten (CC0) and LJ Speech (public domain)
docs/ (website) tools/build_site.py
docs/bilder/ tools/promo.mjs screenshots of the demo mode

Releases: push a tag v*, GitHub Actions runs the tests, signs the APK and attaches it as Funkblick.apk.

Auf Deutsch

Funkblick ist ein WLAN- und Bluetooth-Scanner fürs Android-Handy, auch für GrapheneOS. Die App zeigt jedes Netz und jedes Gerät in Reichweite auf einem Radar, nennt den Hersteller und erklärt ihre Einordnung. Sie warnt, wenn dir ein AirTag oder anderer Tracker folgt oder eine Kamera ein eigenes WLAN aufmacht, und empfiehlt den freiesten WLAN-Kanal für die FRITZ!Box. Der Auto-Modus mit festen Blitzern aus OpenStreetMap und Ansagen ist standardmäßig aus und nur für Beifahrer gedacht (§ 23 Abs. 1c StVO). Die App spricht Deutsch, wenn das Handy auf Deutsch steht.

Mehr auf der deutschen Website: AirTag finden mit Android · Versteckte Kamera finden · WLAN-Kanal für die FRITZ!Box · Blitzer-App für Beifahrer

License

GPL-3.0. Maker data © IEEE, speed and traffic cameras © OpenStreetMap contributors (ODbL), Axon, glasses and drone signatures after RF Sentinel (GPL-3.0), fonts Chakra Petch and IBM Plex Mono (OFL). Not affiliated with Apple, Google, Samsung, Blitzer.de or SØPHIA.

About

Passive Wi-Fi & Bluetooth scanner for Android and GrapheneOS: AirTag tracker detector, hidden camera finder, car mode with map and speed camera alerts, Wi-Fi channel tips. English + German, open source.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages