The Network Survey Android App provides a basic survey capability for Cellular networks, Wi-Fi networks, Bluetooth Devices, and GNSS constellations.
For cellular data, in its current state it can be used to examine the network details of the current serving cell, and log GSM, CDMA, UMTS, LTE, and NR records to a GeoPackage file. Wi-Fi survey records can also be logged to a GeoPackage file, and the current list of Wi-Fi networks in range is displayed in the UI. The App also supports connecting to a remote gRPC server and live streaming the cellular and Wi-Fi records. For GNSS data, it can display the latest information about the satellite vehicles and also log the information to a GeoPackage file. The Bluetooth support allows for scanning and displaying a list of the nearby Bluetooth devices.
A newer feature of the app is the ability to log Call Detail Record (CDR) files. What is a CDR? A CDR is a Call Detail Record that has an event for specific interaction a phone has with the cellular network. For example, a phone call, sms messages, and certain tower changes. There are several possible use cases for recording a CDR; for example, one might be to have a record of what your phone is doing, and what towers it is communicating with. Maybe you are just curious about how cellular networks work, or maybe you are privacy conscious and what to monitor if your phone starts communicating with unexpected towers.
Worthy of note, the regular version of Network Survey does not log SMS events in the CDR, nor does it support logging the "other" phone number associated with a phone call. Logging SMS events requires the full SMS permission, and Google Play won't approve publishing Network Survey to the Play Store if it requests the SMS permission. If you are interested in a CDR logger that supports SMS events and logging the "other" phone number for call events, you can install the app from the source code in this repo, or if you prefer a pre-built apk you can get the latest APK by navigating to the GitHub Actions page, clicking on the latest successful action run, and then scrolling all the way to the bottom and click on "Network Survey CDR Debug APK" or "Network Survey Regular Release APK".
The version of this app on the Play Store has Firebase Crashlytics set up. This means that app crash logs are sent off the device to Firebase. If you don't want to participate in this type of tracking then you have three options.
- Install the app from IzzyOnDroid F-Droid.
- Install the app from the source code in this repo.
- Install the app using the APK from the Release Page.
The privacy policy for this app contains more information on the data that is sent to Firebase for the Google Play Store version of this app.
To build and install the project follow the steps below:
1) Clone the repo.
2) Open Android Studio, and then open the root directory of the cloned repo.
3) Connect an Android Phone (make sure debugging is enabled on the device).
4) Install and run the app by clicking the "Play" button in Android Studio.
If you want to build using the command line, the apk can be built and installed using the following commands. Make sure your phone is connected to your computer before running the install command.
NOTE: If building on Windows, replace
./gradlewwithgradlew
./gradlew assembleDebug
./gradlew installDebugNOTE: This requires a connected device (physical device or Android Emulator)
./gradlew connectedAndroidTest
Install Android Studio to work on this code.
The Network Survey app supports streaming GSM, CDMA, UMTS, LTE, and 802.11 survey records to a gRPC server. More specifically, the Network Survey Messaging library can be used to stand up a gRPC server. From there it is up to the implementation to handle the incoming survey messages.
Currently, GSM, CDMA, UMTS, LTE, NR, 802.11, Bluetooth and GNSS survey records are sent to a connected MQTT broker. They are published on the following MQTT Topics:
- gsm_message
- cdma_message
- umts_message
- lte_message
- nr_message
- 80211_beacon_message
- bluetooth_message
- gnss_message
There is also a DeviceStatus and a PhoneState message that is published on
the device_status_message topic.
The MQTT Broker connection supports both plain text and TLS/SSL connections.
The survey messages are sent in JSON format following the protobuf definitions from the Network Survey Messaging library. The API documentation is published to a web page here .
QR Code for MQTT Broker connection setting needs to provide a JSON string with the following fields.
{
"mqtt_username": "auser",
"mqtt_password": "apassword",
"mqtt_host": "cloud.azure.com",
"mqtt_port": 8883,
"mqtt_client": "aclient",
"mqtt_tls": true
}See the change log for details about each release: CHANGELOG.md
- Christian Rowlands - Craxiom



