GatherSafe
GatherSafe
Back to Blog

Push-to-Talk Voice, Explained

How GatherSafe delivers sub-second walkie-talkie voice over Wi-Fi and cellular, and what keeps it working in the background on iOS and Android.

9 min readGatherSafe Team

Quick answer

GatherSafe's push-to-talk voice runs on LiveKit, a WebRTC selective forwarding unit, with each phone pre-connected and publishing a muted mic track so pressing talk is just an unmute — no per-transmission connection delay. iOS keeps it alive in the background with Apple's PushToTalk framework; Android uses a foreground service that needs Unrestricted battery access.

Push-to-talk is the feature security teams actually live in during a service — one button, instant voice, everyone on the channel hears it. Here's what's actually happening between the moment a finger touches the button and a teammate hears your voice, and the very different work each platform does to keep that connection alive.

What "sub-second" actually means

GatherSafe's voice isn't built on the phone network or on a chat app's message pipe — it runs on LiveKit, a WebRTC selective forwarding unit (SFU). WebRTC is the same real-time media technology behind most modern video calling; an SFU is a server that receives each participant's audio once and forwards it to everyone else in the group, rather than every phone sending audio to every other phone directly. That's what keeps latency low and battery use down even in a group of twenty.

The other trick that makes GatherSafe feel instant is that your phone doesn't wait until you press the button to set up a connection. When you open a group's PTT screen, GatherSafe connects to that group's voice room and publishes a muted microphone track immediately — the negotiation between your phone and the server happens once, up front, not every time you key up. Pressing the talk button is then just an unmute, which is why there's no dial tone, no connecting spinner, no delay.

Half-duplex, on purpose

A GatherSafe channel behaves like a real radio channel: one person transmits at a time, and everyone else listens. That's a deliberate choice, not a limitation — it's what makes a channel with a dozen people on it comprehensible instead of a chaotic conference call. When someone else is talking, the system briefly reflects that in the UI and holds off your own transmission from stepping on theirs, the same courtesy a physical walkie-talkie channel enforces by nature.

Keeping a channel alive when the screen is off

The genuinely hard engineering problem in mobile PTT isn't the voice codec — it's staying reachable in the background without draining the battery or getting killed by the operating system. iOS and Android solve this in fundamentally different ways, and GatherSafe uses the native tool built for each:

iOS · Apple's PushToTalk framework

On iOS 16 and later, GatherSafe joins a group's voice channel through Apple's dedicated PushToTalk.framework. The system — not the app — owns the audio session and the background wake-up, and gives you a transmit control in the Dynamic Island and on the Lock Screen. We wrote a full explainer on how that framework works and what it changes: Apple's PushToTalk Framework, Explained.

Android · Foreground service, not a background trick

Android has no equivalent OS-level PTT framework, so GatherSafe registers a proper foreground service — the same category Android requires for music players and navigation apps that need to keep working with the screen off. That shows a persistent "GatherSafe active" notification while you're connected to a channel, which is Android telling you (and the OS) that something legitimate is running in the background.

Set Android battery usage to Unrestricted

Even with a foreground service correctly registered, most Android phones ship with aggressive battery managers (Doze, adaptive battery, and manufacturer-specific ones from Samsung, Xiaomi, OnePlus, and others) that can still throttle or kill background audio work they think is idle. If PTT audio stops arriving a few minutes after the screen turns off, the fix is almost always the same: open Settings → Apps → GatherSafe → Battery and set it to Unrestricted. Do this once per phone, right after installing the app.

Hardware buttons: on-screen, Bluetooth, and hardware volume keys

You can transmit from the on-screen PTT button, from a paired Bluetooth PTT accessory (see our accessory pairing guide), or — Android only — by mapping a physical volume button while the app is open. Apple does not allow third-party apps to repurpose the iPhone's hardware volume buttons this way, so that option only appears in Settings on Android.

Key takeaways

  • Voice runs over LiveKit (WebRTC), joining the room up front so pressing talk is just an unmute — no per-transmission connection delay.
  • Channels are half-duplex by design: one speaker at a time, like a real radio channel.
  • iOS uses Apple's PushToTalk framework for background reliability; Android uses a foreground service — set its battery usage to Unrestricted.
  • Hardware volume-key mapping for PTT is Android-only; Apple does not permit apps to repurpose the volume buttons.

What good and bad connectivity look like

  • On Wi-Fi or LTE/5G, transmission starts the instant you press the button — there's no perceptible delay.
  • If the network is degraded, GatherSafe shows a connecting state on the channel rather than silently dropping audio, so your team knows to repeat critical information once the connection recovers.
  • Moving between Wi-Fi and cellular mid-transmission is handled automatically — see our post on seamless network handoff for how that works.

Frequently asked questions

What technology powers push-to-talk voice in GatherSafe?

GatherSafe uses LiveKit, a WebRTC selective forwarding unit (SFU). Each participant's audio is sent once to the server and forwarded to everyone else in the group, which keeps latency low and battery use down even in larger groups.

Why is GatherSafe push-to-talk half-duplex?

Channels are half-duplex by design — one person transmits at a time — the same way a physical radio channel works. That keeps a channel with a dozen or more people understandable instead of turning into an overlapping conference call.

Why does Android need battery usage set to Unrestricted for PTT?

Android has no OS-level push-to-talk framework, so GatherSafe keeps voice alive in the background with a foreground service. Many Android phones' battery optimizers can still throttle background audio work unless the app is explicitly set to Unrestricted battery usage in system settings.

GatherSafe

Your congregation deserves better protection

Join security teams across the country who chose purpose-built tools over generic apps. Purpose-built for how church security teams actually operate.

Starting at $8/month  ·  iOS & Android