Share GPS for Android and iPhone

Share GPS user guide

Connect your phone to your computer, record a route, and share your location. Where the two apps differ, each chapter has an Android and an iPhone section.

Back to Share GPS
Browse guide chapters

Introduction

Share GPS shares live location as NMEA or gpsd data and sends recorded tracks or map pins as KML/KMZ. Install the app from the store for your device:

Both apps provide GPS, Tracks, and Settings screens, saved connection profiles, live network sharing, track recording, and KML delivery. Transport choices differ by platform.

What each platform offers

Capability Android iPhone
Minimum version Android 7.0 iOS 17
NMEA Bluetooth Classic Bluetooth SPP Bluetooth LE peripheral
NMEA network TCP server/client; UDP client TCP or UDP server/client
gpsd Bluetooth, USB/ADB, TCP or UDP TCP server
KML secure transfer SCP over SSH SFTP
USB receiver TCP through ADB forwarding Not available
Satellites and accuracy Satellite table and DOP details Accuracy sheet (horizontal and vertical accuracy)

Both apps include local KML files, Google Drive, saved-track sharing, and built-in placemark and track icons. Custom icons and photos are Premium features. The free version allows one saved connection and two saved tracks; see Premium.

In this guide

Get help or email support@brilliantmantis.com.

Requirements

Android

Share GPS requires Android 7.0 or later. Allow precise location for GPS use. Android requests location and, on supported versions, notifications and Nearby devices access at startup. Bluetooth discovery or making the phone discoverable may need additional approval.

File, photo, and SSH-key pickers grant access to the item you select.

For USB/ADB, the receiving computer needs Android Platform Tools, USB debugging enabled in Android Developer options, and authorization on the phone. The app itself installs from Google Play.

iPhone

Share GPS requires iOS 17 or later. Allow location access when prompted. The app requests Local Network access when you start a LAN connection and Bluetooth access when you start a Bluetooth LE profile. Camera access is requested when you take a photo. Selecting an existing image uses the iOS photo picker.

Google Drive sign-in is needed only for Drive delivery. SFTP requires access to a reachable server and valid credentials. For Bluetooth LE output, the receiver must connect to the iPhone and subscribe to Share GPS's notify-only Nordic UART TX characteristic; a Classic SPP receiver will not work. See the Bluetooth LE connection steps.

If location access is off, open Settings, choose Share GPS, and enable Location access. The GPS screen also provides an ENABLE IN SETTINGS action.

Receiver requirements

A network receiver must be reachable from the phone on the selected Wi-Fi or local network. TCP receivers connect to a phone configured as a server; UDP receivers must match the role selected in the app. Network NMEA and gpsd have no built-in authentication or encryption, so use a network you trust.

For Android Bluetooth, use a receiver that supports Classic Bluetooth Serial Port Profile (SPP). For iPhone Bluetooth, use a compatible BLE bridge that subscribes to the Nordic UART TX notifications. For KML over SSH, Android sends SCP and iPhone sends SFTP; the server must support the matching protocol.

Installation

Install or update

Install Share GPS from the official store for your platform:

Use the store's Update action to install updates. Export tracks you want to keep before removing the app; uninstalling can remove app-stored profiles, settings, and tracks.

First launch on Android

Open Share GPS and allow precise location when asked. On supported Android versions, the app also requests notifications and Nearby devices access at startup. Bluetooth discovery or making the phone discoverable may need additional approval.

A visible GPS fix does not start a connection. On the GPS tab, add a profile and tap CONNECT when you are ready to share.

First launch on iPhone

Open Share GPS and allow location access while using the app. iOS asks for Local Network access when a network profile starts, Bluetooth access when a BLE profile starts, and camera access when you choose Take photo. Drive sign-in is optional and appears when you set up Google Drive delivery.

A visible GPS fix does not start a connection. On GPS, tap the row's Start button when you are ready to share.

Free limits

The free version allows one saved connection across all data types and two saved tracks. Premium adds more connections and unlimited saved tracks. See Premium for the purchase and restore options.

Quick Start

This walkthrough shares live NMEA over Wi-Fi. Keep the phone and receiver on the same trusted network. The phone runs a TCP server on port 10110, and the receiving device connects to it.

1. Check the GPS screen

Open the GPS tab and wait for a fix. Choose Motion or Position to change the layout. iPhone always generates NMEA. On Android, if the receiver connects but receives no NMEA sentences, turn on Settings → Create NMEA.

2. Add a TCP server profile

On Android:

  1. Tap + beside CONNECTIONS.
  2. Set Connection Name to a helpful label such as OpenCPN laptop.
  3. Set Data Type to NMEA and Connection Type to TCP/IP.
  4. Set Mode to Listen / Server. Leave Use UDP (default: TCP) off.
  5. Set Port to 10110, then tap SAVE.

On iPhone:

  1. Tap + beside Connections.
  2. Set Name to a helpful label such as OpenCPN laptop.
  3. Set Data Type to NMEA and Connection Type to Network.
  4. Set Mode to Server. Leave Use UDP off.
  5. Set Port to 10110, then tap Save.

3. Start sharing

On Android, tap CONNECT on the profile. On iPhone, tap Start. The row should show Listening. If the phone asks for Local Network access on iPhone or discoverability on Android Bluetooth, accept only when you are setting up that feature.

Find the phone's Wi-Fi address in the device's network settings. Test from a computer with netcat:

nc PHONE_IP 10110

Replace PHONE_IP with the phone's address. On Windows, follow the Tera Term TCP steps. The row changes to Connected and the receiver displays NMEA lines beginning with $.

4. Stop sharing

Tap STOP on Android or Stop on iPhone. To edit a profile, tap its card/name. To delete a profile, use the platform's swipe-to-delete action. Deleting a profile does not ask for confirmation.

Optional: record a track

Open Tracks and tap START. Enter a name, choose a built-in icon if you want one, and confirm with START on Android or Start on iPhone. During recording, tap STOP to save. The free version stores up to two tracks; Premium removes that limit.

Premium

The free version includes one saved connection and two saved tracks. The connection allowance applies across NMEA, GPSD, and KML profiles.

Premium adds more saved connections, Auto-connect, Multi-server, unlimited saved tracks, custom icons, and photos. Built-in icons remain available in the free version. The track limit applies when starting another recording after two tracks are saved; it does not limit the length of a recording already in progress.

For iPhone KML profiles, Auto-connect is available for repeating live-track and placemark profiles. It does not apply to Once only or From track list profiles. NMEA and GPSD profiles also offer Auto-connect on start.

Premium is a one-time purchase through the store for your device. The store displays the current price. Purchases do not transfer between Google Play and the App Store.

Android

Open Settings → PREMIUM and tap the Upgrade row, which includes the store price. The Premium dialog shows the current one-time purchase price. Tap its Upgrade button to continue to Google Play or Not now to close the dialog. Tap Restore purchases in Settings to check Google Play purchases associated with the current store account.

iPhone

Open Settings and tap Share GPS Premium in the Premium section. Tap Buy Premium to purchase or Restore Purchases to restore purchases associated with the Apple account used by the App Store.

iPhone Premium page showing the one-time purchase and restore controls
iPhone

Premium status can take a moment to update after purchase or restore. If the store reports a completed purchase but Share GPS remains locked, Android users can tap Restore purchases in Settings; iPhone users can reopen the Premium page and tap Restore Purchases.

The App

Share GPS has three tabs on Android and iPhone: GPS, Tracks, and Settings. GPS shows the current fix and controls live connections. Tracks records, stores, and shares KML tracks. Settings contains display and platform-specific options.

On Android, tap a connection card to edit it. Use row actions such as CONNECT and STOP to control it. On iPhone, tap the connection name to edit it and use Start or Stop. Both platforms delete profiles by swiping left. Profile deletion has no confirmation; saved-track deletion does.

iPhone adds Start All, Stop All, and a total Clients: n count on GPS. Android shows connected child rows below supported multi-client server profiles. See Connections for status and edit controls.

Android offers a sortable Satellites table and an Accuracy / DOP screen. iPhone offers an Accuracy sheet with horizontal and vertical accuracy. See GPS, Accuracy, and the Android-only Satellites page.

For screen-off behavior and the differences between Android and iPhone settings, see Settings. Premium describes the free limits and paid features.

GPS Screen

The GPS tab shows fix status, position, motion, and saved connections.

Position and motion

Choose Motion to emphasize speed and heading. Choose Position to emphasize coordinates and altitude. The selected layout is remembered.

Fix status Android iPhone
GPS OFF Location access or the device's location service is off. Location access or the device's location service is off.
NO FIX A valid position is not available yet. A valid horizontal fix is not available yet.
2D FIX Three satellites; altitude availability is independent. Valid horizontal accuracy without valid vertical accuracy.
3D FIX Four or more satellites; altitude availability is independent. Valid horizontal and vertical accuracy.
Field What it shows
Latitude / Longitude Current coordinates in the selected coordinate format.
Altitude Current altitude. Android's Altitude in MSL setting changes its displayed reference.
Speed Current speed in the selected speed units.
Heading Direction and bearing in Android Direction Format / iPhone Bearing.
Android GPS screen in Motion layout with an active fix
Android
iPhone GPS screen in Motion layout with an active fix
iPhone
Android GPS screen in Position layout
Android
iPhone GPS screen in Position layout
iPhone

Coordinate format is selected in Settings. Both apps offer decimal degrees, degrees and minutes, degrees/minutes/seconds, and MGRS. iPhone also labels its degrees/minutes/seconds choice DMS. MGRS is available from 80°S to 84°N; outside that range, the apps show decimal-degree coordinates.

The iPhone shows altitude from its location service. Android's Altitude in MSL setting changes displayed altitude reference; it does not rewrite raw receiver NMEA sentences.

Accuracy and satellite details

On Android, tap SATELLITES → to open the Satellites table or ACCURACY → to open Accuracy / DOP. On iPhone, tap ACCURACY → to see its Accuracy sheet. iPhone has no satellite table or DOP screen.

Share and copy

The map-pin share icon opens the share sheet with the coordinates and a Google Maps pin. It appears when a valid fix is available. COPY copies a location string using the template in Settings. These are separate from sharing a KML placemark or track; see Tracks.

Connections

On Android, tap CONNECT, STOP, CANCEL, RECONNECT, or EDIT on the relevant row, depending on its status. Tap the card itself to edit. On iPhone, use Start and Stop. The top row provides Start All and Stop All. See Connections for platform-specific status behavior.

Satellites

Android only

iPhone does not expose a satellite table. Use its Accuracy sheet for horizontal and vertical accuracy.

On Android, tap SATELLITES → on GPS to open the sortable Satellites (n) table.

Column Meaning
SYS Satellite constellation.
PRN Satellite identifier.
ELV° Elevation above the horizon.
AZI° Direction around the horizon.
C/N0 Carrier-to-noise density in dB-Hz; higher generally means a stronger signal.
FIX Whether the satellite is used in the fix.

Tap a column heading to sort by it. Tap the same heading again to reverse the sort order.

The number in Satellites (n) counts every displayed row. It may differ from the satellite count used for the GPS fix.

Android satellite table with several satellite rows
Android

Accuracy

The two apps present different accuracy information. Android calculates satellite geometry and estimated position errors. iPhone shows its own horizontal and vertical accuracy estimates.

Android: Accuracy / DOP

From GPS, tap ACCURACY → to open Accuracy / DOP. The screen uses satellites marked as used in the fix and excludes SBAS satellites. It needs at least four satellites with usable geometry to calculate DOP. Lower DOP means the satellite positions give better geometry for a fix.

Value Meaning
GDOP Position and time geometry.
PDOP Three-dimensional position geometry.
HDOP / VDOP Horizontal / vertical geometry.
TDOP Time geometry.

DOP values are unitless. The screen also estimates east, north, vertical, and total position error. It applies fixed factors of 15 m horizontally, 23 m vertically, and 19 m for position, so treat these values as estimates.

Android Accuracy and DOP screen with unavailable values shown as dashes
Android
iPhone Accuracy sheet with horizontal and vertical values
iPhone

iPhone: Accuracy sheet

On GPS, tap ACCURACY → to open the Accuracy sheet. It shows Horizontal, Vertical, and Fix dimension from the iPhone's location service. It does not show satellite geometry, DOP, or Android's estimated-error values.

The values are the iPhone's own accuracy estimates.

Tracks

Tracks records a route and saves it as a KML track. The library is separate from KML connection destinations.

Start and record

Tap START, enter a name, and choose a built-in icon if desired. Confirm with START on Android or Start on iPhone. During recording, use PAUSE and RESUME as needed. Tap STOP to save or DISCARD to discard after confirmation. Built-in icons are free; custom icons require Premium.

Android track name and icon dialog
Android
iPhone track name and icon sheet
iPhone

During recording, the card shows elapsed time, distance, and average speed over moving time. Saving progress may read SAVING… on Android and SAVING TRACK… on iPhone.

Tap Add photo to take a picture or choose one from the photo library. On both platforms, adding a recording photo requires a valid location fix from the last 30 seconds. A recording supports up to 100 photos with captions up to 200 characters. Photos require Premium.

Android active track recording with statistics
Android
iPhone active track recording with statistics
iPhone

The free version stores up to two tracks. Premium removes that limit. If saving fails, the recording remains paused so you can try again.

Recovery and exit

Android restores an interrupted recording in a paused state. Android also has Discard active recording on exit in Settings. iPhone saves an interrupted recording in the library when it next opens. It has no Android discard-on-exit setting.

For the separate Android notification Stop action, see Background use in Settings. The Tracks STOP action saves a recording.

Saved tracks

Saved tracks show the track name and date on both platforms. Android also shows file size. iPhone shows upload status and stores the library in Documents/Tracks, visible in Files. The free version stores up to two tracks.

Tap the share icon to share a saved track. The system share sheet can offer other apps and, when configured, Google Drive via ShareGPS on iPhone. The library also has direct Share current track and Share location actions; sharing the current track does not stop recording.

Android recorded tracks library
Android
iPhone recorded tracks library
iPhone

Deleting a saved track requires confirmation. Android uses the trash action; iPhone provides a trash button and swipe-to-delete. This confirmation is separate from deleting a connection profile.

Send a track through a KML profile

For KML Track, choose Source → Live track or From track list. Live-track profiles offer Send → Repeat / Once only. From-track-list profiles ask you to choose a saved track and always send once. KML Placemark offers Send without a Source selector. Android Provider profiles always send once.

Android Send a saved track chooser
Android
iPhone saved-track chooser for a KML profile
iPhone

See KML connections, Icons and Photos, and Premium.

Settings

Settings differ by platform. Values shown here are the fresh-install defaults. Settings are saved as you change them.

Android

Section and setting Choices or purpose Default
ADVANCED GPS — Create NMEA Generate NMEA instead of forwarding receiver NMEA Off
Altitude in MSL Use mean sea level reference for displayed altitude On
GPS Timer (ms) Update interval 1000
File Write Timer (s) Repeat interval for KML file output 4
GPSD Control Let gpsd WATCH requests start or stop location updates when no other activity needs them Off
NOTIFICATION DATA — Notification data Motion — speed, heading; Position — latitude, longitude, altitude; Track — speed, distance traveled Motion
DISPLAY FORMAT — Altitude Units Meters (m), Kilometers (km), Feet (ft), Miles, Nautical Miles (nmi) Meters (m)
Distance Units Meters (m), Kilometers (km), Feet (ft), Miles, Nautical Miles (nmi) Meters (m)
Speed Units m/s, km/h, ft/s, mph, Knots (kn) mph
GPS Coordinate Format Decimal Degrees, Degrees : Minutes, Degrees : Minutes : Seconds, MGRS Decimal Degrees
Direction Format Direction | Degrees, Direction only, Degrees only Direction | Degrees
Track Time Format Seconds, Min : Sec, Hour : Min : Sec Hour : Min : Sec
APPEARANCE — Theme Dark, Daylight Dark
PREMIUM Upgrade (store price), Restore purchases Not purchased
MISCELLANEOUS — Discard active recording on exit Discard the in-progress recording on exit; saved tracks are kept Off
Copy Location String Template tokens: <lat>, <lon>, <alt>, <dir>, <speed>, <disStart>, <disTrav>, <trackTime> <lat>,<lon>
Close Stalled WiFi Socket Close a badly backed-up stalled socket Off
ABOUT Version; Open source licenses Installed version

Altitude in MSL changes the altitude reference used in display, KML, and gpsd. It does not change raw receiver NMEA. Generated GGA uses a separate altitude adjustment.

The Android notification displays the selected preset. This setting does not customize individual notification fields.

Android Advanced GPS and notification settings
Android
Android display format and appearance settings
Android
Android Premium, miscellaneous, and About settings
Android

iPhone

Section and setting Choices or purpose Default
Google Drive — Drive account and access Sign in, grant access, refresh access, or disconnect Not connected
Premium section Share GPS Premium opens the Premium page; purchased devices show Premium unlocked Not purchased
GPSD control — GPSD Control Keep location updating in the background for watched gpsd sessions Off
Display format — Coordinates Decimal degrees, Degrees + minutes, Degrees + minutes + seconds, DMS, MGRS (80°S to 84°N) Decimal degrees
Speed Meters/second, Kilometers/hour, Miles/hour, Knots Miles/hour
Distance Meters, Kilometers, Feet, Miles, Nautical miles Miles
Altitude Meters, Kilometers, Feet, Miles, Nautical miles Meters
Bearing Direction + degrees, Direction, Degrees Direction + degrees
Time Seconds, Minutes:seconds, Hours:minutes:seconds Hours:minutes:seconds
Copy location string Template tokens: <lat>, <lon>, <alt>, <dir>, <speed>, <disStart>, <disTrav>, <trackTime> <lat>,<lon>
Appearance — Theme Dark, Daylight Dark
About Version; Open source licenses Installed version

iPhone has no Advanced GPS timers, generated-NMEA switch, notification settings, MSL switch, discard-on-exit option, or stalled-socket setting. Its Motion/Position layout is selected on GPS and defaults to Motion.

iPhone Drive, Premium, GPSD control, and display format settings
iPhone
iPhone Dark appearance and About settings
iPhone

Background use

On Android, a notification stays visible while sharing or recording with the screen off. Its Stop action stops sharing and pauses an active track. The Tracks STOP action saves the track.

On iPhone, a running connection or track recording keeps location updates active while the app is in the background. If iOS closes Share GPS, reopen the app and start the connection or recording again.

Connections

A connection is a saved profile that shares NMEA or GPSD data, or delivers KML/KMZ files.

Choose a profile type

Data or destination Android iPhone
NMEA over network TCP server/client; UDP client TCP or UDP server/client
NMEA over Bluetooth Classic Bluetooth SPP Bluetooth LE peripheral
NMEA over USB ADB-forwarded TCP listener Not available
GPSD Bluetooth, USB, TCP or UDP TCP server only
KML over secure transfer SCP/SSH SFTP
KML to local storage Local File Local
Share with another app Provider profile and direct share actions Direct share actions

NMEA TCP defaults to port 10110. GPSD defaults to 2947. Network services do not encrypt or authenticate data, so use a trusted network.

Android connection profiles with one listening
Android
iPhone connection list with one active profile
iPhone

The free version allows one saved connection; Premium adds additional profiles.

Add, edit, and delete

On Android, tap + beside CONNECTIONS or KML CONNECTIONS to add a profile. Tap a parent card to edit it; tap SAVE to replace its current connection settings. Use the row's CONNECT, STOP, CANCEL, RECONNECT, or EDIT action as shown for its status. Multi-client child rows show connected receivers and cannot be edited or deleted individually.

On iPhone, tap + beside Connections or KML Connections. Tap the connection name to edit it; tap Save to keep changes. Use Start and Stop to control profiles. GPS also has Start All and Stop All. Start All skips profiles that use From track list, because they need you to choose a saved track. The GPS screen shows a total Clients: n count.

To delete a profile, swipe its row left. On Android, the swipe reveals a trash button; tap it. On iPhone, tap the native Delete action. Profile deletion has no confirmation. It stops and removes the profile.

Android connection row swiped left to show its trash button
Android
iPhone connection row swiped left to reveal the native Delete action
iPhone

Stop a connection before changing its settings. On iPhone, opening a KML profile for editing stops that output; start it again afterward. Network and BLE changes take effect the next time you start the profile. On Android, saving an edit replaces the running connection.

The free version allows one saved connection across all data types. Premium adds additional profiles, Auto-connect, and Multi-server. Android has separate child rows for supported multi-client servers; iPhone shows a total client count on GPS. TCP servers on both platforms and UDP servers on iPhone can use Multi-server. An iPhone UDP server accepts up to 128 registered sources; otherwise it serves one. Bluetooth serves one receiver at a time, and iPhone allows one saved BLE profile even with Premium. On iPhone TCP profiles, the option is labelled Multi-server (allow multiple clients).

Connection status

Android actions depend on the row status: CONNECT starts an idle profile; STOP stops an active one; CANCEL cancels a connection attempt; RECONNECT retries a degraded connection; EDIT opens a profile with an error. iPhone uses Start while idle or failed and Stop while connecting or active.

KML profiles may also show Waiting, Retrying, or Sending on iPhone. Android shows connection state and child client rows where supported. Read the status label to see whether a profile is listening, connected, or waiting to send.

KML source and delivery

For KML Track, choose Source → Live track or From track list. Live-track profiles offer Send → Repeat / Once only. From-track-list profiles ask you to choose a saved track and always send once. KML Placemark offers Send without a Source selector. Android Provider profiles always send once.

iPhone KML editor with From track list selected
iPhone profile editor

Connection guides

NMEA over Bluetooth

Android only

iPhone uses NMEA over Bluetooth LE, not Classic Bluetooth SPP.

Android can send NMEA to one receiver over Classic Bluetooth Serial Port Profile (SPP). Add NMEA, choose Bluetooth, enter a profile name, then tap SAVE. The connection is a listener; it does not connect outward to another device.

To allow any incoming SPP receiver, leave Auto-find device on. To select a particular receiver, turn it off, then use the scan control beside Device Address to choose a paired device. Auto-find does not scan or pair for you.

Request discoverable when connecting is off by default. If enabled, a manual start requests Android discoverability consent. While the profile is listening, tap DISCOVERABLE if the receiver needs the phone to remain visible.

Android Bluetooth SPP profile editor
Android

Only one Bluetooth listener profile is supported, and it serves one receiver at a time. For NMEA, a new peer may replace the current peer. Premium Multi-server does not add more Bluetooth receivers.

If the receiver cannot connect, start the profile, use DISCOVERABLE if needed, and check that the receiver is paired with the phone and supports SPP. Android requests Nearby devices access at startup; scanning or discoverability may need additional approval. See the Linux Bluetooth receiver steps.

NMEA over Bluetooth LE

iPhone only

Android uses Classic Bluetooth SPP.

Share GPS sends generated NMEA from an iPhone to a compatible BLE receiver. The receiver (the BLE central) scans for the phone (the peripheral) and subscribes to its notifications. Share GPS does not provide a Classic Bluetooth serial port or receive commands over BLE.

Start BLE output

  1. On GPS, tap + and choose NMEA.
  2. Set Connection Type to Bluetooth (BLE).
  3. Enter a Name, tap Save, then tap Start.
  4. Keep Share GPS open while the receiver connects. If the iPhone shows a pairing prompt, accept it on the phone.

The app advertises the local name ShareGPS and Nordic UART Service UUID 6E400001-B5A3-F393-E0A9-E50E24DCCA9E. Its TX characteristic is 6E400003-B5A3-F393-E0A9-E50E24DCCA9E and sends notifications only. There is no writable RX characteristic. The receiver must subscribe to TX notifications; tools that require a writable RX characteristic are incompatible.

iPhone NMEA profile using Bluetooth BLE with the built-in setup instructions visible
iPhone

Receive with a BLE bridge

The app sends UTF-8 NMEA text with CRLF line endings. Notifications may split a sentence, so bridge software must reassemble bytes into lines. Output includes GGA, VTG, RMC, and GSA sentences; GSV appears when satellite observations are available. BLE sends live output only, not gpsd commands or track files. One receiver gets data at a time; a newer subscription takes over.

macOS

Install the bridge:

pipx install ble-serial

Start the iPhone profile, then run:

ble-serial -t 25 \
  -s 6e400001-b5a3-f393-e0a9-e50e24dcca9e \
  -r 6e400003-b5a3-f393-e0a9-e50e24dcca9e \
  --permit ro --expose-tcp-port 5555

Read the bridge output from a second Terminal window:

nc 127.0.0.1 5555

The bridge selects by service UUID, so no address or pairing step is needed.

Linux

Install ble-serial with pipx and use BlueZ tools. Before every session, remove any existing ShareGPS pairing from the Linux host. In bluetoothctl, check paired devices. If ShareGPS is listed, remove that entry:

pipx install ble-serial
bluetoothctl devices Paired
bluetoothctl remove <SHAREGPS_ADDRESS>

Start the iPhone profile, scan for ShareGPS, and connect using its current address:

ble-scan -t 18
ble-serial -t 25 -d <CURRENT_ADDRESS> \
  -r 6e400003-b5a3-f393-e0a9-e50e24dcca9e \
  --permit ro --expose-tcp-port 5555

Replace the address placeholders with the ShareGPS entry and the current address shown by ble-scan. Watch the iPhone and accept its pairing prompt while the bridge connects. In another terminal, read the NMEA stream:

nc 127.0.0.1 5555

Do not pair from iPhone Bluetooth Settings. If iOS closes Share GPS, reopen it and start the BLE profile again. The iPhone may appear under its device name instead of ShareGPS in the receiver's Bluetooth list.

NMEA over USB

Android only

iPhone has no USB/ADB connection profile.

The Android USB profile starts a TCP listener that a computer reaches through ADB port forwarding. USB is useful when the receiver has no Wi-Fi connection.

Prepare the phone and computer

Enable Developer options and USB debugging on the Android phone. Install Android Platform Tools on the receiving computer, connect the USB cable, and authorize that computer on the phone when prompted. These are receiver setup steps; install Share GPS from Google Play.

Check that ADB lists the phone as authorized:

adb devices

Create the USB profile

In Share GPS, add NMEA and choose USB. Leave the default port 10110 unless your receiver requires another port. Save the profile and tap CONNECT.

Android USB profile showing port 10110 and Multi-server
Android

Premium Multi-server allows supported USB profiles to serve multiple receivers. It does not add authentication.

Forward the phone port

Forward a computer-side port to the same phone-side port:

adb forward tcp:10110 tcp:10110

Connect your receiver to 127.0.0.1:10110 on the computer. To remove this forwarding rule later:

adb forward --remove tcp:10110

Connect to the computer-side loopback address and forwarded port. ADB forwards that computer connection to the phone's USB profile.

For Linux-specific ADB steps, see Linux USB/ADB. Android USB does not create a serial port; it forwards a TCP connection.

NMEA over TCP/UDP

Both apps can share NMEA on a local network. Use a trusted network: these streams have no authentication or encryption.

TCP server

A server listens on the phone. The receiver connects to the phone's network address and port.

On Android, add NMEA, choose TCP/IP, set Mode to Listen / Server, leave Use UDP (default: TCP) off, and set Port to 10110. Tap SAVE, then CONNECT.

On iPhone, add NMEA, choose Network, set Mode to Server, leave Use UDP off, and set Port to 10110. Tap Save, then Start. iOS may ask for Local Network access.

Android TCP server settings showing Listen / Server and port 10110
Android
iPhone NMEA network server editor on port 10110
iPhone

TCP client

A client connects outward to a receiver that is listening. Choose Connect / Client on Android or Client on iPhone, enter the receiver's Host and port, save, then start the profile. Confirm that the receiver firewall permits incoming connections.

UDP

Android's NMEA UDP option forces client mode. Select Use UDP (default: TCP) and enter the receiver's Host and port. A passive UDP listener on the receiver can then collect incoming datagrams.

iPhone supports UDP server and client roles. For a UDP server, the receiver must first send a registration or hello datagram from the same local socket that will receive NMEA. Continue sending a hello within 75 seconds to keep that source registered. The server sends updates to registered source endpoints. A passive UDP listener that never sends a datagram will not register. Premium Multi-server (allow multiple clients) lets an iPhone UDP server serve up to 128 registered sources; without it, the server serves one.

Android NMEA UDP client editor
Android

Premium Multi-server allows supported TCP servers on Android and iPhone to accept multiple clients. Android USB servers also support this option. It is not available for Bluetooth, and does not add an authentication layer. Both apps use port 10110 as the default NMEA port.

gpsd Server

Share GPS implements a useful subset of gpsd's JSON command interface. Android also supports Share GPS SHGPS extensions. The iPhone GPSD profile is a TCP server on port 2947; it does not offer a GPSD UDP or client mode.

Create a profile

On Android, add GPSD, choose a supported connection type, and set port 2947 when using TCP/IP or USB. Android can also provide GPSD over Bluetooth or UDP.

On iPhone, add a profile, select GPSD, and save. The app selects Network, Server, and port 2947 automatically. Tap Start.

Android GPSD profile editor
Android
iPhone GPSD profile editor showing its TCP server settings
iPhone

Ask for data

On iPhone, the server sends no greeting when a TCP client connects, so send ?VERSION; first. Android TCP or Bluetooth sends a VERSION response on connect. Sending VERSION explicitly works on both platforms. Standard TCP commands end with a semicolon.

To test from a computer, connect with netcat and request JSON updates:

nc PHONE_IP 2947
?VERSION;
?WATCH={"enable":true,"json":true};

Replace PHONE_IP with the phone's network address. See the gpsd command reference for more commands. GPSD Control is off by default. On Android, WATCH requests can start and stop location updates when no other activity needs them. On iPhone, a watched session can keep location updating in the background. Disabling one watch does not stop other watched sessions, a recording, or another active connection.

Android supports USB and Bluetooth SPP. Its UDP GPSD server requires a newline after each semicolon-terminated command and replies to the configured client port. UDP commands and SHGPS extensions are Android only. iPhone GPSD has no satellite observations for a meaningful SKY satellite/DOP list.

Privacy

Neither platform adds authentication or encryption to network gpsd. Use a trusted local network or a VPN. The connection editor does not provide an interface-binding control.

KML over Secure Transfer

Android delivers KML over SCP. iPhone delivers KML over SFTP. Both run over SSH, but they are different file-transfer protocols. Check which protocol your server accepts.

Android: SCP/SSH

Add a KML Placemark or KML Track profile and choose Connection Type → SCP/SSH. Set Host, Port (normally 22), Remote Username, and Remote File Path, including the .kmz filename. For a key, set Auth Method → SSH Key, tap Import Private Key, and choose an RSA, Ed25519, or ECDSA private key. Enter a passphrase if needed. Use Copy public key and add it to the server account's ~/.ssh/authorized_keys. A blank password can prompt when the connection starts.

An unknown or changed host key shows a fingerprint prompt. Verify the fingerprint with the server administrator before accepting it, then start the profile again. There is no saved host-key management screen. Keep a backup of an imported private key if you may need to set up another device.

iPhone: SFTP

Choose Destination → Change destination → SFTP. Enter Name, Server, Username, Authentication, and Remote folder. For a non-default SSH port, enter it in Server as hostname:port. Authentication can be Password or OpenSSH private key. If using a key, paste it into Private key and enter its Passphrase if required. Tap Save for the destination, then Save for the profile; the filename is set separately.

Android SCP/SSH editor set to SSH Key with an example host
Android
iPhone SFTP endpoint form with Password selected and credential fields empty
iPhone

iPhone supports OpenSSH Ed25519 and RSA private keys. It does not accept PEM-format keys. Password must be entered in the destination editor; it cannot be left blank for a start-time prompt.

The first host key is trusted and pinned automatically on the device. A changed host key is rejected. If the server has intentionally changed its key, contact support for the safe recovery path before changing server or app data. Credentials and pinned keys remain on that device.

KML to Google Drive

Google Drive can store repeating KML output and one-time track exports. Each platform has its own sign-in and folder-selection flow. Grant Drive access only if you plan to use this destination.

Connect Drive

On Android, create a KML Placemark or KML Track profile, set Connection Type → Google Drive, then tap Google Drive destination. Choose an account, or use the default folder. To choose another folder, search by name, select a result, then tap Done. Save the profile and tap CONNECT.

On iPhone, open Settings → Drive account and access to sign in and grant access. In a KML profile, choose Destination → Change destination → Google Drive. You can use the app's default folder or choose Choose Google Drive folder… to open Google's folder picker.

The default destination is the managed ShareGPS folder. Share GPS reuses it or creates it on the first upload. Choosing another writable folder changes the destination; files are not automatically merged or moved between folders. Do not delete a Drive folder that contains files you want to keep.

Configure KML delivery

For KML Track, choose Source → Live track or From track list. Live-track profiles offer Send → Repeat / Once only. From-track-list profiles ask you to choose a saved track and always send once. KML Placemark offers Send without a Source selector. On Android, Provider always sends once.

Android labels the file field File Name and its save action SAVE. iPhone uses Filename and Save; tap Start to send. Android offers Use ShareGPS folder; iPhone labels the default choice Use ShareGPS folder (default). Give different profiles unique filenames when you want outputs kept separate.

On iPhone, a saved-track share can also offer Google Drive via ShareGPS when Drive is connected. A private Drive upload does not create a public URL for desktop viewers.

KML to Local File

A KML Track profile can send a live track or a saved track. Choose Source → Live track or From track list. Live-track profiles offer Send → Repeat / Once only. From-track-list profiles ask you to choose a saved track and always send once. A KML Placemark profile offers Send without a Source selector. Android Provider profiles always send once.

Android

Add a KML Placemark or KML Track profile and choose Local File. Set Directory and File Name; the default folder is Downloads/shareGPS. Use the folder picker to choose a destination. If Share GPS cannot write there, select a folder that grants write access. Tap SAVE, then CONNECT.

iPhone

In the KML profile, tap Change destination, choose Local, set Filename, then tap the profile's Save button. Output is stored in Documents/ShareGPS/Live, visible in the Files app. iPhone uses this app-managed folder and does not offer an arbitrary Directory field.

Android Local File track profile using From track list
Android
iPhone KML profile editor showing Live track and Send choices
iPhone

The saved-track library is separate. On iPhone it is in Documents/Tracks. On Android it is shown in the Tracks tab.

Removing a profile does not remove files already delivered to a folder. Repeating output updates according to the profile's delivery choice; a one-time send is a snapshot.

Share Sheet and Provider

Android provides a one-time Provider destination for KML. For sharing on either platform, direct share actions send a current location or track through the system share sheet.

Android Provider profile

Create a KML Placemark or KML Track profile and select Connection Type → Provider. For a KML Track, choose Source → Live track or From track list. A live source sends a snapshot; a saved source asks you to select a track when starting. Provider always sends once. Save the profile and tap CONNECT.

The Android system chooser lists apps that accept the exported KMZ. Receiving-app support varies.

Share directly on either platform

Use Share current track to share the active recording, Share location to create a location placemark, or the saved track's share icon to share that file. Sharing the current track does not end a recording. The GPS map-pin share icon sends a text link with coordinates; the Tracks share action sends KML/KMZ.

iPhone has no Provider profile. Its direct share controls use the iOS share sheet. A configured Drive account may add Google Drive via ShareGPS for a saved track.

Android system share sheet for an exported KMZ file
Android

Icons and Photos

KML output can include a placemark, a route, or both. Built-in placemark icons and track icons are available on Android and iPhone. Custom images and photos require Premium.

Placemark icons and photos

When editing a KML Placemark, choose a built-in icon in ICON AND PHOTOS on Android or Icon and photos on iPhone. Built-ins include Default, Pin, Arrow, Car, Person, Bicycle, and Boat. Choosing a custom image requires Premium.

Android placemark editor with built-in icon and photo controls
Android
iPhone placemark editor with built-in icon selection
iPhone

You can add up to five photos to a placemark, add a caption, and remove photos before sending. Add photo and Take photo require Premium. Captions can be up to 200 characters. Photos and custom icons are resized automatically.

Track icons and recording photos

Choose a built-in icon when naming a new track. Tap Add photo to take a picture or choose one from the photo library. On both platforms, adding a recording photo requires a valid location fix from the last 30 seconds. A recording supports up to 100 photos with captions up to 200 characters. Track photos and custom track icons require Premium.

Android active recording with photo count
Android
iPhone active recording with photo count
iPhone

The saved track includes an automatically generated summary such as distance, elapsed time, and average speed. Photo captions are editable; the summary is not a general-purpose description field.

A saved track sends the KML file already in the library. Changing icons or photos in a placemark profile does not edit an existing saved track.

Desktop Setup

Choose the connection type your receiver can use. A receiving computer must be able to reach the phone and understand the selected data format.

Receiver path Android iPhone
NMEA over TCP Yes Yes
NMEA over UDP Phone is a client Phone can be client or server
gpsd TCP, USB/ADB, Bluetooth SPP, or UDP TCP server
Serial NMEA Bluetooth SPP or TCP through a virtual COM bridge BLE-to-serial bridge, or network through a virtual COM bridge
USB/ADB Yes No
KML/KMZ Local, Drive, or secure transfer Local, Drive, or secure transfer

For TCP NMEA, start a phone server and connect the desktop receiver to the phone's Wi-Fi address and port. iPhone requires Local Network access. For iPhone BLE, a BLE-to-serial or BLE-to-TCP bridge must subscribe to the Nordic UART TX notifications; Share GPS does not create a COM port itself. See NMEA over Bluetooth LE.

A Google Earth Network Link must point to a path or URL the desktop can actually read. Uploading a private Drive or SFTP file does not publish a public refreshable URL.

Windows: com0com

com0com creates a virtual serial-port pair. A bridge program connects one end to a Share GPS TCP stream while a mapping application opens the other end as a COM port. Install driver releases from the official com0com project; Windows may block unsigned drivers.

Create the virtual pair

  1. Install com0com and open its setup tool.
  2. Create or select a paired port.
  3. Assign the application-facing end an unused COM name such as COM8.
  4. Note the bridge-facing name, such as CNCB0.

A com0com virtual pair with an application COM port

Connect the phone's TCP server

Start a TCP server profile in Share GPS. On Android use NMEA → TCP/IP → Listen / Server; on iPhone use NMEA → Network → Server. The default port is 10110.

From the directory containing com2tcp, connect its serial-facing side to the phone:

com2tcp --telnet \\.\CNCB0 PHONE_IP 10110

Replace the COM-pair name, phone address, and port with your values. The bridge opens a TCP client connection to the phone's listening server.

Open the paired application COM port, such as COM8, in the mapping program.

USB/ADB can use a host-side ADB-forwarded listener in place of PHONE_IP and the phone port. This branch applies to Android only. For Wi-Fi, use the phone's address and the same port configured in its profile.

com2tcp using an Android ADB-forwarded listener

com2tcp connected to an Android ADB-forwarded TCP server
Android ADB-forwarded example using localhost:20175. For Wi-Fi, substitute the phone address and profile port.

If Share GPS is configured as a TCP client, a separate local TCP listener is required; the command above is for a phone server and does not create that listener.

iPhone BLE first needs a BLE bridge; see NMEA over Bluetooth LE. Driver signing, current com2tcp options, and companion menus depend on the versions installed on the computer.

Windows: Tera Term

Use Tera Term to confirm that NMEA sentences arrive before configuring a mapping program. Download it from the official Tera Term project.

Wi-Fi TCP

  1. In Share GPS, create an NMEA TCP server profile. On Android choose TCP/IP → Listen / Server. On iPhone choose Network → Server.
  2. Leave UDP off and use port 10110 unless your receiver requires another port.
  3. Start the profile, then open Tera Term and choose TCP/IP.
  4. Enter the phone's Wi-Fi address and port 10110. Select plain TCP if asked.
Tera Term TCP settings for a Share GPS server
This screenshot uses example port 50000. Set the same port in the phone profile; the walkthrough above uses 10110.

NMEA appears as lines beginning with a dollar sign, such as GPGGA and GPRMC.

NMEA output in Tera Term

Android USB or Bluetooth

For USB, create the Android USB profile and the ADB forwarding rule in NMEA over USB. In Tera Term, connect to 127.0.0.1 and the computer-side forwarded port.

Android ADB forwarding command on Windows
The screenshot uses phone-side port 50000; set the USB profile and forwarding rule to matching ports.
Tera Term settings for an Android ADB-forwarded port
The screenshot uses phone-side port 50000; connect to the computer-side port shown in the ADB rule.

For Classic Bluetooth, pair the Android phone and computer, start the Bluetooth profile, then select the phone's Bluetooth COM port in Tera Term.

Tera Term Bluetooth serial settings

iPhone BLE requires an external BLE-to-serial/TCP bridge; Share GPS does not present a Bluetooth COM port. If a connection is active but no NMEA appears on Android, enable Create NMEA in Settings.

Windows: GpsGate

GpsGate Splitter can receive a phone's TCP NMEA stream and provide a virtual COM port to an application that expects serial GPS. Check the GpsGate downloads page for current product availability and instructions.

Configure the input

  1. Start a phone TCP server in Share GPS. Android uses TCP/IP → Listen / Server; iPhone uses Network → Server.
  2. In GpsGate, add a TCP/IP input and enter the phone address and port (10110 by default).
  3. Allow Local Network access on iPhone if prompted.
  4. Confirm that the input reports received data.

The screenshots show an Android ADB-forwarded example using localhost port 20175. For Wi-Fi, set the input to the phone's address and its profile port.

GpsGate TCP client settings for an Android ADB-forwarded input
Android ADB-forwarded example: localhost:20175.
GpsGate showing a connected Android ADB-forwarded input
Received-data status for the localhost:20175 example.

USB/ADB can provide a computer-side TCP endpoint for Android. iPhone has no USB profile, and Bluetooth SPP is Android only. To use iPhone BLE, add a compatible BLE-to-serial or BLE-to-TCP bridge before GpsGate.

Configure the output

Add a virtual COM output, note the assigned port, and choose that port in the receiving application.

GpsGate virtual COM output

Troubleshoot phone-to-GpsGate input first, then GpsGate-to-COM output.

Linux: Bluetooth

Android uses Classic Bluetooth SPP. iPhone uses a different Bluetooth LE peripheral service.

Android SPP

Pair the phone using the desktop Bluetooth panel or bluetoothctl. Then add NMEA → Bluetooth in Share GPS, save, and tap CONNECT. The phone is a listener and serves one receiver at a time. Use DISCOVERABLE on the connection row if discovery is needed.

Linux Bluetooth manager connected to the Android SPP service
Android Classic Bluetooth SPP receiver.

Linux distributions differ in whether they include BlueZ's rfcomm compatibility utility. If available, connect an RFCOMM device to the phone's SPP service and point the receiving program at that serial device:

sudo rfcomm connect /dev/rfcomm0 PHONE_MAC CHANNEL

Discover the service channel with the desktop's Bluetooth tools; do not assume it is always channel 1. Auto-find device in Share GPS permits an incoming peer without a selected address; it does not scan or pair the computer automatically.

iPhone Bluetooth LE bridge

Before every Linux session, remove any existing ShareGPS pairing from the Linux host, then scan for the iPhone. Watch the iPhone and accept its pairing prompt while connecting. Start the iPhone BLE profile in Share GPS and follow the Linux BLE bridge steps. The BLE address may change between sessions.

Linux: USB/ADB

Android only

iPhone has no USB/ADB connection profile.

ADB forwards a TCP port on the computer to the Android phone's USB profile. It does not create a serial device by itself.

Prepare ADB

  1. Install Android SDK Platform Tools from your distribution or the Android developer site.
  2. Enable Developer options and USB debugging on the phone.
  3. Connect the unlocked phone and approve its authorization prompt.
  4. Verify the state:
adb devices

The state should be device. unauthorized means the phone still needs approval. offline usually means the cable, USB mode, or ADB server must be reset.

Forward the port

Create NMEA → USB in Share GPS and note its port. Start the connection, then forward a computer port to the phone port:

adb forward tcp:20175 tcp:10110
adb forward --list

Applications on the computer can connect to 127.0.0.1:20175.

Android ADB port-forward command
The screenshot uses phone-side port 50000; set the USB profile and forwarding rule to matching ports.

Test with:

nc 127.0.0.1 20175

ADB forwarding lasts only while the ADB server and device connection remain active. Recreate the rule after reconnecting the phone or restarting ADB. gpsd receiver syntax varies by release; verify its network-source syntax with the installed version.

Linux: netcat

Use netcat (nc) to test a Share GPS stream before configuring gpsd or a serial bridge. Netcat options vary across distributions; check nc -h if a listen command is rejected.

TCP server

Start the phone's NMEA server profile, then connect from Linux:

nc PHONE_IP 10110

This works with Android TCP/IP → Listen / Server and iPhone Network → Server.

netcat connecting to an Android or iPhone TCP server
This screenshot uses example port 50000. Set the same port in the phone profile; the walkthrough above uses 10110.

TCP client

If Share GPS is configured as a TCP client, start a listener on Linux first:

nc -l 10110

Set the phone profile's Host to the Linux computer's reachable address and the matching port.

netcat listening for an Android or iPhone TCP client
This screenshot uses example port 50000. Set the same port in the phone profile; the walkthrough above uses 10110.

Android USB/ADB

After forwarding a port from the phone:

nc 127.0.0.1 20175
netcat reading an Android ADB-forwarded stream
The screenshot uses phone-side port 50000; set the USB profile and forwarding rule to matching ports.

UDP

For Android NMEA UDP client output, listen on the receiver port first:

nc -u -l 10110

iPhone UDP server requires the receiver to register by sending a datagram to the phone first, then keep receiving on the same local socket and refresh registration within 75 seconds. A passive nc listener does not register with the phone.

For iPhone GPSD, request VERSION explicitly before WATCH; iPhone does not send a greeting when TCP connects. Android GPSD UDP commands need a newline-terminated datagram. See the gpsd command reference.

A Share GPS stream displayed by netcat

Google Earth

The desktop edition of Google Earth can receive live GPS data or display a KML/KMZ file. The steps below refer to the desktop application; web and mobile editions may not provide the same GPS and Network Link controls.

Real-time NMEA

  1. Create a phone TCP server profile. Android uses NMEA → TCP/IP → Listen / Server; iPhone uses NMEA → Network → Server.
  2. If Google Earth needs a serial port, bridge the TCP stream to a virtual COM port with com0com or GpsGate.
  3. Wait for a valid fix and confirm NMEA output in a terminal first.
  4. In desktop Google Earth, open Tools → GPS and select Realtime.
  5. Enable automatic path following if desired, then start the scan.

Google Earth real-time GPS settings

Bluetooth SPP can be used with Android where the computer exposes a Bluetooth serial port. iPhone BLE requires an external BLE bridge.

Refresh a KML/KMZ file

  1. Configure a KML destination that writes to a path or URL the desktop can read.
  2. In Google Earth, choose Add → Network Link.
  3. Enter a name and select that accessible file or URL.
  4. Set a periodic refresh if the destination updates, then save the link.

Google Earth network-link settings

A refreshed Share GPS placemark in Google Earth

A repeating live KML profile refreshes according to its delivery setting. A Once only send and a saved-track export are snapshots. Uploading to private Google Drive or SFTP does not itself create a public Network Link URL.

gpsd Commands

Share GPS supports a subset of the gpsd JSON command protocol. Android adds Share GPS SHGPS extensions. Android and iPhone support the standard commands described here, with platform differences noted below. See the gpsd JSON reference for the full protocol.

Connect and request data

Android TCP and Bluetooth SPP send a VERSION response when a client connects. iPhone sends no greeting; request ?VERSION; explicitly. UDP has no connection handshake.

?VERSION;
?WATCH={"enable":true,"json":true};

Supported standard commands are VERSION, DEVICES, DEVICE, WATCH, POLL, TPV, and SKY. POLL includes TPV, GST, and SKY arrays. A standalone GST command is not supported. The version object reports the protocol-advertised release, not the installed app version.

Command or class Purpose
VERSION Reports the gpsd protocol version.
DEVICES / DEVICE Lists or describes the data source.
WATCH Selects JSON or NMEA streaming for this client.
TPV Reports time, fix mode, position, altitude, speed, and heading when available.
SKY Reports DOP values and satellite details when available.
POLL Returns current TPV, GST, and SKY data together.
GST Appears in POLL; a standalone GST request is unsupported.

Common TPV fields include mode (0 = disabled, 1 = no fix, 2 = 2D, 3 = 3D), time, lat, lon, altMSL, altHAE, epx, epy, epv, track, and speed. The alt field matches altMSL. SKY can include xdop, ydop, hdop, vdop, tdop, pdop, gdop, nSat, and uSat. Each satellite entry can include PRN, gnssid, svid, az, el, ss, and used.

iPhone has no satellite observations, so its SKY output does not contain a satellite or DOP list.

WATCH formats and location demand

Enable JSON streaming:

?WATCH={"enable":true,"json":true};

Enable generated NMEA streaming:

?WATCH={"enable":true,"nmea":true};

To disable the watch and clear both selected output formats:

?WATCH={"enable":false,"json":false,"nmea":false};

Each client has its own WATCH settings. The enable option controls whether gpsd requests location updates; json and nmea select streamed formats. Sending only enable:false does not clear a previously selected JSON or NMEA format.

With GPSD Control enabled, Android uses clients' WATCH requests to decide when location updates are needed. On iPhone, a watched gpsd session can keep location updating in the background. Turning off one watch does not stop other watched sessions, a recording, or another active connection.

Android-only UDP notes

Android GPSD supports UDP roles. Terminate each command with a semicolon and include a newline in every datagram. The UDP server replies to the configured client port. Default GPSD port is 2947.

Android-only Share GPS extensions

The following commands are available only on Android. SHGPS commands are unavailable on iPhone.

SHGPS.WATCH

Read or set the extension stream settings:

?SHGPS.WATCH;
?SHGPS.WATCH={"location":true,"track":true,"gga":true,"rmc":true,"raw":0};

Set raw to a nonzero integer to return SHGPS.LOCATION and SHGPS.TRACK as comma-separated values instead of JSON. GGA and RMC remain NMEA sentences.

SHGPS.LOCATION

?SHGPS.LOCATION;

The response contains mode, UTC time, lat, lon, and alt. Altitude follows Android's MSL display correction setting.

SHGPS.TRACK

?SHGPS.TRACK;

The response contains in_track, start_lat, start_lon, start_alt, dis_trav in meters, and track_time in milliseconds. Start altitude is the raw receiver (ellipsoidal) altitude.

NMEA snapshots

?SHGPS.GGA;
?SHGPS.RMC;

These return one generated sentence each. SHGPS commands, UDP, and their output framing are Android only. Network gpsd has no authentication or encryption.

Troubleshooting

Start with the phone's GPS screen and one direct receiver such as netcat. Add a virtual COM bridge, gpsd, or a mapping app only after raw data is visible.

Location

Android does not get a fix

  • Turn on the device's location service and allow precise location for Share GPS.
  • Test outdoors with an open view of the sky.
  • Open the Satellites screen to see received rows; visible rows do not all have to be used for the fix.
  • If updates stop with the screen off, check that the app's sharing notification is active and review the phone manufacturer's battery controls.

iPhone does not get a fix

  • Turn on Location Services and allow access for Share GPS.
  • If GPS shows Location access is off, tap ENABLE IN SETTINGS and enable location for the app.
  • Test outdoors with an open view of the sky.
  • iPhone has no Satellites table. Use ACCURACY → to see the iPhone's own accuracy estimates.

Altitude differs

Android's Altitude in MSL setting changes the altitude reference used in display, KML, and gpsd. It does not change raw receiver NMEA. Generated GGA uses a separate adjustment. iPhone shows altitude from its location service and has no MSL switch.

Permissions and background operation

Android requests location and, on supported versions, notifications and Nearby devices access at startup. Bluetooth discovery or making the phone discoverable may need additional approval. For screen-off sharing, keep the app's notification active. Its Stop action stops sharing and pauses a recording; the Tracks STOP action saves it.

iPhone asks for location at first use, Local Network access when a network profile starts, Bluetooth access when BLE starts, and camera access when taking a photo. If iOS closes Share GPS, reopen it and start the connection or recording again. A BLE receiver must subscribe to the notify-only Nordic UART TX characteristic.

No data reaches the receiver

NMEA is blank

On Android, turn on Create NMEA in Settings if the device provides a location fix but no receiver NMEA. On iPhone, NMEA is generated automatically. Output includes GGA, VTG, RMC, and GSA, with GSV when satellite observations are available.

TCP cannot connect

  • Put both devices on a reachable network and check the phone address and port.
  • Match roles: one side must listen as server and the other connect as client.
  • Allow the port through the receiver computer's firewall.
  • On iPhone, allow Local Network access for Share GPS.

UDP produces no output

Android NMEA UDP is a client role; start the receiver listener and verify its Host and port. iPhone supports UDP server and client. For an iPhone UDP server, the receiver must first send a registration datagram from the same socket that receives NMEA, then refresh registration within 75 seconds. UDP has no delivery acknowledgement.

Android USB says no device, unauthorized, or offline

Run adb devices, approve the phone's authorization prompt, use a data-capable cable, and verify USB debugging. Recreate the ADB forwarding rule after reconnecting the phone.

Bluetooth receiver cannot connect

Android Bluetooth uses Classic SPP. Start the listener and use DISCOVERABLE if the receiver needs the phone visible. Auto-find device does not scan or pair automatically. iPhone Bluetooth uses BLE; start Share GPS in the foreground and choose a receiver that supports notify-only Nordic UART output. Do not pair from iPhone Bluetooth Settings.

Connection status

Platform Status Next step
Android Disconnected or Idle Tap CONNECT.
Android Connecting... Wait, or tap CANCEL.
Android Listening or Connected Verify the receiver is reaching the server.
Android Degraded or Very Degraded Check receiver speed and network quality; tap RECONNECT if needed.
Android Error Tap EDIT and correct the profile.
iPhone Idle or Failed Tap Start.
iPhone Connecting, Listening, or Connected Check receiver and network. Tap Stop to cancel or stop.
iPhone Waiting, Retrying, or Sending Check the KML destination and storage.

Tap the connection card or name to edit it. Swipe left to reveal the platform's delete action: Android's trash button or iPhone's Delete. Profile deletion does not show a confirmation.

Files and secure transfer

Local KML output fails

On Android, choose a folder that the system picker grants for writing; arbitrary paths may not be writable. On iPhone, local KML output uses Documents/ShareGPS/Live, visible in Files.

Google Drive fails

Check the network and account access. On Android, open Google Drive Settings and search for a folder by name. On iPhone, use Settings → Drive account and access and the Google folder picker.

SCP/SSH or SFTP host-key error

Android asks you to verify an unknown or changed fingerprint. Contact the server administrator, verify it through a trusted channel, then accept only if it matches. iPhone automatically pins its first host key and rejects a changed key. These flows differ.

Android imports a private key file. iPhone accepts an OpenSSH Ed25519 or RSA private key pasted in the SFTP destination editor; PEM-format keys are not supported.

Tracks and Premium

Android restores an interrupted recording paused. iPhone saves an interrupted recording in the library when it next opens. If stopping a current recording fails, try again; the recording remains available to retry.

The free version allows one saved connection and two saved tracks. Premium adds connections, Auto-connect, Multi-server, unlimited tracks, custom icons, and photos. On Android, use Settings → Restore purchases if a completed Google Play purchase is not active. On iPhone, open the Premium page and use Restore Purchases.