An indoors LTE/5G signal measurement application for Android that uses Augmented Reality and initial geolocation to approximately geolocate cell signal measurements made in local space.
The application uses the TelephonyManager, an Android System API to obtain data regarding signal strength of the cell it is connected to. The TelephonyManager API provides different instances of CellSignalStrength ( e.g., CellSignalStrengthLTE, CelSignalStregnthNR, etc. )
All provided values are saved as a JSON string that is sent to a backend server measurements.espaciosoa.com that centralizes the storage of all the measurements for later visualization.
The application consists mainly of a single Augmented Reality screen (video-see through) that allows measuring points in the surroundings of the user, visualizing the measured points (via coloured spheres indicating the measured points in context) and sending the measured data to the backend server.
Step 1: Open Measuring activity and hold still the phone in front of you. The camera will open and it will estimate the rotation and position of the device to later account for them when converting from local to world coordinates. You can optionally set a new origin by tapping on the screen and placing a 3d object that will be used as new center of coordinates. Step 2: Measure LTE/5G signal strength. Click on Start measure and move around your environment to measure cell signal in your surroundings. By default, measurements are taken on a fixed period basis (e.g., 1s) but you can also trigger measurements at a given point by clicking "Instant measure". Users can see the trace of the points they have measured by checking the spheres being generated as breadcrumbs. The color depends on the signal strenght (level). Step 3: Finish the measuring session and send the data to the backend. Once completed, the user will be prompted with the possibility to start another measurement session.
Make sure the application has the basic configurations properly setup, matching the backend server configuration. You can set up /app/build.gradle with something like the following
//...
buildTypes {
getByName("debug") {
// Main app configuration constants
buildConfigField "boolean", "SECURE", "true"
buildConfigField "String", "BASE_URL", "\"your.server.com\""
buildConfigField "String", "TOKEN", "\"YOURTOKENHERE\""
buildConfigField "boolean", "USE_SELF_SIGNED", "false"
}
///...
![]() |
![]() |
![]() |
🔗 Android App | 🔗 Web visualizer | 🔗 Precise measurement module for Raspberry-Pi |