Connecting a Receiver
Mapit GIS supports external GNSS receivers for centimetre-level positioning accuracy. On Android, you can connect a receiver via Bluetooth (most common), TCP/IP (network-connected receivers or NTRIP streams), or via a third-party companion app that pipes location data through Android's mock location system. On iOS, only TCP/IP connections are currently supported.
Only one connection method can be active at a time - enabling one automatically disables the others.
- Android
- iOS
Bluetooth Connection
Most external GNSS receivers communicate over Bluetooth using the Serial Port Profile (SPP). This is a serial data stream that carries NMEA sentences from the receiver to the app.
Pairing a Device
- Open Settings from the main menu.
- Navigate to External GNSS.
- Toggle Paired Bluetooth GPS on.
- The app requests Bluetooth permissions (
BLUETOOTH_CONNECTandBLUETOOTH_SCANon Android 12+). - A device picker dialog appears listing all bonded (paired) Bluetooth devices by name and MAC address.
- Select your receiver. The device address and name are saved for future sessions.
Pair the receiver with your Android device first via Android Settings > Bluetooth before opening Mapit GIS. The app only shows already-paired devices - it does not perform Bluetooth discovery.
Connection Process
When a Bluetooth GNSS session starts, the app attempts to connect using four methods in sequence, with automatic retries:
| Method | Description |
|---|---|
| Device UUID | Uses the UUID advertised by the receiver itself |
| Standard SPP UUID | Uses the standard Serial Port Profile UUID (00001101-0000-1000-8000-00805F9B34FB) |
| Insecure RFCOMM | Uses an insecure RFCOMM channel - helpful for older receivers that reject secure connections |
| Direct channel | Opens RFCOMM channel 1 directly via reflection - a last-resort fallback for receivers that do not advertise any UUID |
Each method is retried up to twice before the app moves to the next. Once a connection is established, the app begins reading NMEA sentences from the receiver's data stream.
Data Timeout
If no data arrives for 5 seconds after the connection is established, the app treats the connection as stale and disconnects. This prevents the app from appearing connected while the receiver has actually gone to sleep or out of range.
Foreground Service
While connected, the app runs an External GNSS foreground service to prevent Android from killing the connection during background operation. A persistent notification confirms that the GNSS connection is active. This service also holds a CPU wake lock to keep the processor running when the screen is off.
TCP/IP Connection
For network-connected GNSS receivers, NTRIP casters, or GNSS data relayed from a PC, you can connect over TCP/IP.
Configuration
- Open Settings > External GNSS.
- Toggle TCP GPS on.
- Enter the Server hostname or IP address (default:
localhost). - Enter the Port number (default:
52003).
Socket Configuration
The TCP connection is tuned for real-time GNSS data:
| Setting | Value | Purpose |
|---|---|---|
| Keep-alive | Enabled | Prevents router/firewall timeout on long sessions |
| TCP no-delay | Enabled | Disables Nagle's algorithm for low-latency NMEA delivery |
| Read timeout | 90 seconds | Tolerates quiet periods in NTRIP streams while detecting dead connections |
Auto-Reconnect
If the TCP connection drops unexpectedly, the app automatically attempts to reconnect:
- Up to 3 retries with exponential backoff (2 s, 4 s, 8 s).
- A toast message shows
"Connection lost, reconnecting (attempt X)...". - If all retries fail, the app falls back to the internal GPS.
Foreground Service
The TCP foreground service additionally acquires a Wi-Fi lock (low-latency mode) and registers a network callback to prevent Android from disconnecting the Wi-Fi radio during the session.
Third-Party Companion Apps
Some GNSS manufacturers provide their own companion apps that deliver corrected positions via Android's mock location system. Mapit GIS can read location data from these apps instead of connecting to the receiver directly.
Supported Apps
| App | Manufacturer | Preference |
|---|---|---|
| Eos Tools Pro | Eos Positioning Systems (Arrow series) | Eos Tools Pro |
| Zeno Connect | Leica Geosystems (Zeno series) | Zeno Connect |
| Trimble Mobile Manager | Trimble | Trimble Mobile Manager |
| Trimble SPace | Trimble (DA2 receiver) | Trimble SPace |
| SXblue Toolbox | Geneq (SXblue series) | SXblue Toolbox |
How It Works
- Open Settings > External GNSS.
- Toggle the appropriate companion app option on.
- The companion app must be running and delivering mock locations via
LocationManager.GPS_PROVIDER. - Mapit GIS reads the standard Android
Locationobject and extracts extended data from theextrasbundle - including DOP values, satellite information, RMS accuracy, fix type, differential correction age, and more.
Companion apps typically handle RTK corrections, NTRIP connections, and antenna calibration internally. The corrected position is then delivered to Mapit GIS as a mock location.
Extended Data from Companion Apps
In addition to standard position and accuracy, Mapit GIS reads the following from the location extras bundle when available:
- DOP values: HDOP, VDOP, PDOP, GDOP, TDOP
- RMS accuracy: HRMS, VRMS, 3D RMS
- Satellite info: satellites in use, satellites in view, PRN IDs, elevation, azimuth, SNR, constellation type
- Differential data: correction age, correction station ID, fix type
- Height data: MSL height, geoid undulation, antenna height
- Receiver info: model name, SBAS correction system
Mock Location Provider
When connected via Bluetooth or TCP/IP, Mapit GIS can optionally act as a mock location provider itself. This means the external GNSS position is injected into Android's location system, making it available to all other apps on the device - not just Mapit GIS.
To use this feature, you must enable Developer Options on your Android device and set Mapit GIS as the mock location app under Developer Options > Select mock location app.
Mock location requires Developer Options to be enabled. On managed (enterprise) devices, this setting may be restricted by your IT administrator.
Connection Priority
If multiple connection options are enabled simultaneously (which is not recommended), the app resolves them in this priority order:
- Internal GPS (default)
- Bluetooth GPS
- TCP GPS
- Eos Tools Pro
- Zeno Connect
- Trimble Mobile Manager
- SXblue Toolbox
- Trimble SPace (highest priority)
The last enabled option in this list takes precedence.
On iOS, external GNSS receiver connections are currently limited to TCP/IP only. Direct Bluetooth connection is not yet available - we are in the process of obtaining Apple MFi certification from GNSS receiver manufacturers to enable this. Third-party companion apps and mock location providers are also not supported on iOS at this time.
TCP/IP Connection
TCP/IP is the only supported method for connecting an external GNSS receiver on iOS. This works with network-connected receivers, NTRIP casters, or GNSS data relayed from a PC or companion device over Wi-Fi.
Configuration
- Open Settings > External GNSS.
- Toggle TCP GPS on.
- Enter the Server hostname or IP address.
- Enter the Port number.
The app connects to the specified TCP endpoint and begins reading NMEA sentences from the data stream.
How It Works
Many GNSS receivers offer a Wi-Fi hotspot or can stream NMEA data over a local network. Some common setups:
| Setup | Description |
|---|---|
| Receiver Wi-Fi hotspot | Connect your iPhone/iPad to the receiver's Wi-Fi network and enter its IP address |
| NTRIP relay | Use a PC or companion device to relay NTRIP corrections and NMEA output over TCP |
| Local network | Receiver and iOS device on the same Wi-Fi network |
If your receiver has its own companion app that can output NMEA over a TCP port, you can use that app alongside Mapit GIS. Configure the companion app to listen on a TCP port, then point Mapit GIS at localhost (or the device's IP) and that port.