> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.chrt.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.chrt.com/_mcp/server.

# Live Location

> How live location works in the chrt driver app — foreground vs background, the permission prompts, battery considerations, and how Android buffers location updates while offline.

When you start a task group, the app streams your live location back to
chrt so dispatch and the shipper can see where you are on the map. This
page covers how that works, what permission you need to grant, what runs in
the background, and the Android-specific offline buffering behavior.

## Before you start

* You signed in to the driver app and granted location permission on first
  launch. If you skipped it, the **Share Location with Dispatch** toggle
  in [Settings](/app/settings) prompts again when you turn it on.
* For full functionality, the app needs **Always** location permission
  (iOS) or **Allow all the time** (Android). Without background grant,
  location only flows while the app is the foreground app — which means
  dispatch loses your position the moment you switch apps or lock the
  screen.

## How live location works

Live location is opt-in per driver via the **Share Location with Dispatch**
toggle in **Settings**. When on:

* Your device sends location updates to chrt while the app is running.
* The updates appear on the order map for the active task group, on the
  driver map for your org's dispatchers, and on the public tracking page
  if the shipper has shared it.
* The app only streams location while you have an order in progress and
  sharing is on — it does not run a background GPS pull when you're idle
  off-shift.

## 1. Grant Always / Allow all the time

iOS and Android both make background location a two-step grant.

#### iOS

1. On first launch, iOS asks for **While Using the App**. Tap **Allow**.
   This is enough for the toggle to turn on, but it isn't enough for
   background tracking.
2. The first time you enable **Share Location with Dispatch** with only
   *While Using*, the app prompts again for **Always Allow**. Tap
   **Change to Always Allow** to escalate.
3. iOS may also ask for **Precise Location** — say yes. The app needs
   precise (not approximate) accuracy for delivery routing. The
   location-sharing row in Settings warns you if precise is off and
   offers an **Enable** action.

If you ever change your mind and deny **Always**, the Settings card
shows **Location Permission: While Using App** with a **Settings**
button to jump to the iOS Settings app.

#### Android

1. On first launch, Android asks for **While using the app**. Tap
   **Allow**.
2. The app then asks for **Allow all the time** as a separate prompt.
   On Android 11 and newer, this opens a system settings screen — you
   have to pick **Allow all the time** explicitly. The app cannot
   grant this in a single tap on modern Android; that's an OS-level
   protection.
3. Android may also surface a precise-vs-approximate choice. Pick
   precise.

If background is denied, the offline banner doesn't apply — you'll
just stop streaming as soon as the app isn't in foreground.

## 2. Turn on Share Location with Dispatch

Open the **Settings** tab and toggle **Share Location with Dispatch** on.

* If permission is granted and precise location is on, the toggle flips
  and location starts streaming for any in-progress order.
* If permission is denied or accuracy is approximate, the app shows a
  toast / inline status explaining what's wrong and won't enable the
  toggle.

The card under the toggle shows the last reported coordinate and how long
ago you were seen — useful for confirming the stream is alive before you
hit the road.

## 3. Foreground vs background

| Scenario                                         | Behavior                                                                                                                                                                 |
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| App in foreground (you're looking at it)         | Location streams normally.                                                                                                                                               |
| App in background but recent (you switched apps) | iOS / Android keep streaming via the foreground service / background-location entitlement. iOS shows the blue location indicator in the status bar while this is active. |
| Phone locked, app suspended                      | Continues streaming for the active task group as long as **Always** / **Allow all the time** is granted. iOS shows the blue indicator briefly when it polls.             |
| App force-quit                                   | Streaming stops until you reopen the app.                                                                                                                                |

> **Note**
>
> Force-quitting the app (swiping it off the recents list on iOS, or
> swiping away on Android) cuts the background location service. If you
> meant to leave it running, just lock the phone instead of swiping the
> app away.

## Battery considerations

Live location streaming uses GPS, which costs battery. To minimize impact:

* **Stop sharing when you're off shift.** Toggle **Share Location with
  Dispatch** off in Settings. The toggle is per-driver and is the cleanest
  way to stop the stream cold.
* **Don't leave the app force-quit and re-opened constantly.** The first
  GPS lock after a cold start is the most expensive — leave the app
  backgrounded between stops instead of swiping it away.
* **Plug in for long-haul drives.** This is mobile dispatch reality, but
  worth saying — most drivers using chrt are charging while they drive.
* **iOS Low Power Mode reduces background work.** Streaming will still
  function but updates may come less frequently. Same on Android Battery
  Saver mode.

## Android: offline location buffering

When you're driving an order on Android and you lose signal, the app
keeps GPS samples locally instead of dropping them. Once you reconnect,
buffered samples flush to the API. The result is that dispatch sees a
gap-then-flush on the map rather than a flat-line.

* The buffer is durable for the current trip — it survives the app being
  backgrounded but is meant for trip-scale gaps, not multi-day outages.
* If the app is force-quit or the device reboots, the buffer is best-effort
  and may be partial after recovery.

iOS does not buffer offline location updates today. If you lose signal on
iOS, that gap will show as missing positions until you reconnect; the
positions during the outage are not recovered after the fact.

## How to know it worked

* Settings card shows **Location Permission: Always** (iOS) or **Allow all
  the time** (Android) and a recent **Last seen** timestamp.
* On the order map in the web app, dispatch sees your blue driver dot
  moving along the route.
* The shipper-facing tracking link (if shared) shows the same dot.
* iOS shows the blue location indicator in the status bar when the app is
  using location in the background.

## If something looks different

* **Permission shows "While Using App" / "Only this time" instead of
  Always.** Tap **Settings** on the permission row and switch to **Always
  Allow** / **Allow all the time** in the OS Settings app. The app cannot
  escalate without an OS-level grant.
* **Status says "Approximate".** Tap **Enable** on the accuracy row, or
  go to OS Settings > the chrt app > Location and turn on precise.
* **Dispatch says they can't see your position.** Confirm the toggle is
  on, the permission is **Always**, and that the task group is **In
  Progress** (location only streams for active orders). Pull to refresh
  the Settings tab — the last-seen row updates every 10 seconds.
* **Battery is draining unexpectedly.** Check that you only have sharing
  on for the current shift. Streaming + screen-on navigation + a hot cell
  signal is the usual combination. Plug in.
* Contact [hi@chrt.com](mailto:hi@chrt.com) if location won't start even
  with Always granted.

## Related guides

* [Accepting orders](/app/accepting-orders) — the **Start** action that
  begins live location for an order.
* [Settings](/app/settings) — toggle, permissions, and per-driver
  controls.
* [Tracking shipments](/shippers/tracking) — the shipper's view of your
  location.
* [Troubleshooting](/app/troubleshooting#location-not-updating) — when
  location stops updating.