Requirements
Z3DMR is a tool for licensed amateur-radio operators. Before you start, make sure you have:
- A valid amateur-radio licence issued by your national authority.
- A DMR ID - a 7-digit personal ID registered to your callsign. If you don't have one yet, register for free at radioid.net.
- Access to a DMR network - for example BrandMeister or another master server that speaks the Homebrew protocol. Some networks (like BrandMeister) require you to set a personal hotspot security password in their self-care portal.
- An Android phone running Android 8.0 (Oreo) or newer, with an internet connection (Wi-Fi or mobile data).
No extra hardware is needed - no hotspot, no dongle, no radio. Your phone's microphone, speaker and internet connection are the whole station.
Installation
-
Install from Google Play
Search for "Z3DMR" on Google Play or use the button on the home page. The app is free, with no ads and no in-app purchases.
-
Grant permissions
On first launch, allow Microphone (required to transmit your voice) and Notifications (connection status and incoming-call alerts). Location is optional - grant it only if you want Z3DMR to report your grid locator to the network or beacon your position to APRS; decline it and everything else still works, with placeholder position. Audio is never recorded or stored - it is only streamed live while you press PTT.
-
Download the vocoder firmware
DMR uses AMBE voice coding. Z3DMR decodes and encodes it on your device using the MD-380 vocoder firmware - a small, one-time download the app fetches when first needed. You can manage or re-test it later under Settings → Firmware.
-
Optional: allow unrestricted battery
To keep receiving calls reliably in the background, exclude Z3DMR from battery optimization when the app asks. This is optional but recommended if you notice dropped connections when the screen is off.
First-time setup: create a profile
A profile bundles your identity and one network connection. You can keep several - for example one per network or per club callsign - and switch with a single tap.
-
Open Profiles → Add Profile
The Profiles tab is in the bottom navigation bar.
-
Enter your identity
Profile name - anything you like. Callsign - your licensed callsign. DMR ID - your 7-digit ID. ESSID - a two-digit suffix (01-99) that distinguishes this device when the same DMR ID is used in more than one place; if this is your only hotspot-style connection, any two-digit value works.
-
Pick a master server
Tap Server and choose from the built-in, searchable directory - it is grouped by DMR network (BrandMeister, TGIF, DMR+ IPSC2, FreeDMR, ADN and more), so
BM_2081_France,TGIFandIPSC2_GR_DMOall sit under their own heading. Star the ones you use, and pick a master geographically close to you for the lowest latency. The + button adds a server that isn't in the directory by name and address. -
Enter the network password
This is the password the network expects for hotspot connections - on BrandMeister it is the hotspot security password you set in SelfCare. It is stored on your device only, encrypted with the Android Keystore.
-
Choose a talkgroup and save
The talkgroup picker is filtered to the DMR network your chosen server belongs to, so you only see groups you can actually reach on that network. Pick the talkgroup the profile should subscribe to on connect (you can change it any time while operating). Tap Save, then Connect on the profile card. The card shows a live ACTIVE badge and connection timer once you're on.
Operating the radio
The Radio screen
- Status card - shows Connected/Idle, the talkgroup you're subscribed to, and lights up green with the caller's country, callsign and name while receiving. The speaker icon on the right mutes incoming audio; the timer shows how long the current transmission has run.
- Group / Private switch - choose between talkgroup calls and 1-to-1 private calls.
- PTT button - hold to talk, release to listen (or tap-to-toggle, see Settings). The button is disabled with "Channel busy - incoming call" while someone else is transmitting if Busy Lock is on.
- Level meter - live RX/TX audio level.
- Activity log - every transmission on the channel: time, callsign, target and duration, with the operator's country flag shown next to the callsign. Tap the sliders icon to choose which columns are shown (including the flag), or the bin icon to clear the log.
Prefer a different balance? Settings → Radio lets you hide the on-screen PTT button (the log grows to fill the space) or hide the activity log (the PTT button grows instead) - so the screen matches how you actually operate.
Talkgroups
Tap the Group Call selector to open the talkgroup picker. Search the built-in directory, tap to subscribe, and star the groups you use often - they stay pinned under Favorites, with your recent groups listed below. The + button adds a talkgroup number manually.
The list is scoped to your DMR network: every DMR network (BrandMeister, FreeDMR, DMR+ IPSC2, ADN Systems…) runs its own set of talkgroups, so Z3DMR shows only the groups available on the network your selected server belongs to. A colour-coded network badge is shown on the picker, the radio screen, the session sheet and each profile card so you always know which network you're working with. Your favourites and recents are remembered per network, too.
Private calls
Switch the selector to Private and pick an operator from the built-in DMR-ID directory (searchable by callsign, name or ID), or add a contact manually. Favourites work the same way as talkgroups.
Hardware PTT, and PTT with the screen locked
Prefer a real button? Under Settings → Radio → Hardware Buttons, press any hardware key or Bluetooth headset button twice to bind it to PTT. The same screen binds Previous and Next, which step through your favourite talkgroups - or your favourite contacts on a private call - so you can change channel without looking at the phone. Turn on PTT Wake & Focus if you want the PTT button to wake the screen and bring Z3DMR to the front.
To keep those buttons working while Z3DMR is minimized or the screen is off, enable Talk while screen is locked. Volume keys need one extra step: Android only lets an app see them in the background through an accessibility service, so Z3DMR asks you to switch on Z3DMR PTT in Android's Accessibility settings. It is used for exactly one purpose - noticing the keys you bound - and it does not read your screen, capture other keystrokes, or collect, store or share anything. You can turn it off at any time.
If the Android switch is greyed out as "Restricted setting", open Z3DMR under Settings ▸ Apps, tap the ⋮ menu, choose "Allow restricted settings", then go back and enable it.
When the phone rings
Z3DMR gets out of the way on its own. Under Settings → Audio → Interruptions:
- Mute During Calls silences incoming radio audio while a phone call - or any other app - is using the speaker. You can still unmute by hand if you want to keep monitoring, and the radio returns to normal when the call ends.
- Stop Transmitting During Calls immediately cuts an in-progress transmission if a call takes over the speaker mid-key-up, so nobody on the talkgroup hears half a private conversation.
Mute & session details
Tap the speaker icon on the live call panel to mute incoming audio without dropping the connection - handy when you want to stay joined but silence the channel. Tap it again to un-mute. Muting is per-session and always starts off when you launch the app. Tap the rest of the panel while connected to open a session details sheet: profile, server, DMR network, talkgroup, DMR ID (with ESSID when set, e.g. 2940103 / 01), uptime, data used and audio state.
Backup, restore & share profiles
In the Profiles tab, use Export to save all your connection profiles to a .json file (via the Android file picker), and Import to load them back - on a new phone, or to share a club setup. Importing replaces your current profiles, so it is disabled while a profile is connected. The exported file contains your profile passwords in plain text, so keep it somewhere safe.
APRS & position reporting
Z3DMR can share where you are - two independent, optional features that both use a one-shot GPS fix. Both need the Location permission; without it, the app sends placeholder values and everything else keeps working.
Grid locator on the network
When you connect, the app reads your position once and includes your city and Maidenhead grid locator in the connection details it sends to the master server - the same information a hardware hotspot reports. Nothing is sent while you are disconnected.
APRS position beaconing
Turn this on under Settings → APRS to put your station on the APRS map. While you are connected to a DMR network, Z3DMR opens a brief connection to the public APRS-IS network and beacons your position under your callsign. You control:
- Station type / SSID - phone (-5), pedestrian/handheld (-7) or mobile (-9); this picks the icon that appears on the map.
- Beacon interval - how often a position is sent (1, 5, 10 or 30 minutes).
- Comment - a short free-text note attached to your beacon.
The first beacon goes out as soon as you connect, then follows your chosen interval. The APRS screen shows the time, grid and callsign of the last beacon so you can confirm it worked.
APRS is a public position-reporting network. When beaconing is on, your callsign and location are visible to anyone (for example on aprs.fi). It is off by default - only enable it if you are comfortable sharing your position publicly.
Settings reference
Z3DMR has a lot of settings, so there is a search box at the top of the Settings tab. Type what you're after - "busy", "vibrate", "gain", "language" - and tap the result to jump straight to it, whichever section it lives in.
| Section | What you'll find |
|---|---|
| Audio | RX and TX automatic gain control, manual RX/TX gain (-24 to +24 dB) when AGC is off, key / PTT / end-of-transmission tones, and the interruption rules that mute the radio or cut your transmission when a phone call takes over the speaker. |
| Radio | PTT mode (hold or tap), Busy Lock, PTT Wake & Focus, on-screen PTT and activity-log visibility, hardware button binding (PTT, Previous and Next), background / lock-screen PTT, and TOT - the transmit time-out that cuts a stuck transmission, with its warning time plus visual and audio warnings. |
| Network | Auto-connect on launch, auto-reconnect with a configurable retry count, "open talkgroup on connect" (the brief key-up that makes a master route your group), optional unlink via TG 4000 on talkgroup change, and data-usage counters you can reset. |
| APRS | Enable position beaconing, station icon and SSID, beacon interval, optional status text, plus the status of the last beacon sent. Your Maidenhead locator is added automatically and the APRS-IS passcode is derived from your callsign - nothing to configure. |
| Notifications | The persistent status notification, incoming-call and connection alerts, and their sound and vibration. |
| System | Light / dark / system theme, soft or high-contrast colour style, language (26 languages), keep-screen-awake, the system log you can copy or clear, settings export/import, and reset to defaults. |
| DMR Data | Manual refresh of DMR IDs, talkgroups and master servers; your own custom DMR ID source URL; and backup / restore of your talkgroups, private contacts and saved servers. |
| Firmware | Vocoder firmware status and files, plus a self-test that decodes a built-in sample and tells you exactly what it found. |
| About | Version, the club behind the app, donate and community links. |
Appearance & language
Under Settings → System you choose light, dark or "match the system" theme, and a soft or hard colour style - soft for muted, easy-on-the-eyes colours, hard for high contrast in bright sunlight.
The interface is fully translated into 26 languages: English, Español, Français, Português, Русский, Deutsch, Türkçe, Italiano, Polski, Українська, Nederlands, Română, Ελληνικά, Magyar, Čeština, Српски, Български, Slovenčina, Hrvatski, Slovenščina, Lietuvių, Македонски, Latviešu, Eesti, हिन्दी and 简体中文. Pick one and the app switches instantly - no restart.
Keeping the DMR data fresh
DMR IDs, talkgroups and the master-server list come from the official online repositories and refresh themselves automatically once a day. Under Settings → DMR Data you can force any of them to update right now with Update Hosts, Update DMRIDs and Update TGs.
If you maintain your own DMR ID list, enter its URL as a custom DMR ID source. Z3DMR tries your source first on every update, including the daily one, and falls back to the built-in repository automatically if the download fails, the source is unreachable, or it contains no valid records - the screen always tells you which source the last update actually came from.
Troubleshooting
I can't connect to the master server
- Double-check the password - on BrandMeister this is your personal hotspot security password from SelfCare, not your login password.
- Verify your DMR ID is correct and registered to your callsign.
- If you use the same DMR ID elsewhere (a hotspot, another app), give each connection a different ESSID.
- Try another master server - the one you picked may be down for maintenance.
I hear nothing / others don't hear me
- Make sure the vocoder firmware is downloaded: Settings → Firmware shows its status and offers a test.
- Check the media volume and the RX/TX gain in Settings → Audio.
- Watch the level meter while talking - if it doesn't move, the microphone permission may have been revoked.
- Remember most talkgroups are quiet most of the time - the Activity Log shows if anything is being received.
The connection drops when the screen is off
- Exclude Z3DMR from battery optimization (Android Settings → Apps → Z3DMR → Battery → Unrestricted).
- Enable auto-reconnect in Settings → Network so the app rejoins after a network change (Wi-Fi ↔ mobile data).
- Some vendors (Xiaomi, Huawei, OnePlus…) have aggressive extra "app killers" - see dontkillmyapp.com for per-brand steps.
PTT won't key up
- If the button says "Channel busy - incoming call", Busy Lock is doing its job - wait for the transmission to end, or disable Busy Lock in Settings → Radio.
- If your transmission cuts off automatically, you hit the TOT limit - raise it in Settings → Radio.
- If it cut off the moment your phone rang, that's Stop Transmitting During Calls in Settings → Audio - turn it off if you'd rather keep the key down.
My hardware PTT button stops working when the screen is off
- Turn on Talk while screen is locked under Settings → Radio → Hardware Buttons.
- If you bound a volume key, Android also needs the Z3DMR PTT accessibility service - the app offers to open the right screen. Without it, Android hands volume keys to the system instead of Z3DMR.
- If the Android switch is greyed out as "Restricted setting": Settings ▸ Apps ▸ Z3DMR ▸ ⋮ ▸ Allow restricted settings, then try again.
Nobody hears me on this network, but the app says I'm connected
- Some networks only route a talkgroup after you key it up. Leave Open talkgroup on connect on in Settings → Network - it sends a brief key-up so the master starts routing your group.
- If your talkgroups are already static on the server, turn it off so the app doesn't key up needlessly.
- On networks that need the previous group dropped first, enable Unlink with TG 4000 on talkgroup change.
Still stuck? Open Settings → System → System Log - it records connection events and errors, and is the first thing to share when asking for help.
FAQ
Do I really need an amateur-radio licence?
Yes. Z3DMR connects to real amateur-radio DMR networks, where transmitting requires a licence and a DMR ID registered to your callsign. Unlicensed use violates network rules and radio regulations.
Is the app really free? What's the catch?
Completely free - no ads, no tracking, no in-app purchases. It's built by Radio Amateur Club Z37CPR to modernize amateur radio. If you find it useful, an optional donation helps keep it going.
Which networks does it work with?
Any DMR master server that speaks the Homebrew repeater protocol - including the worldwide BrandMeister network, TGIF, DMR+ IPSC2, FreeDMR and independent ADN-style servers. The built-in directory is grouped by network and refreshes itself, and you can always add a server by name and address.
What languages is the app available in?
26 languages - English, Español, Français, Português, Русский, Deutsch, Türkçe, Italiano, Polski, Українська, Nederlands, Română, Ελληνικά, Magyar, Čeština, Српски, Български, Slovenčina, Hrvatski, Slovenščina, Lietuvių, Македонски, Latviešu, Eesti, हिन्दी and 简体中文. Choose one under Settings → System → Language; the whole interface switches instantly, no restart needed.
What happens if my phone rings while I'm on the air?
Z3DMR gets out of the way. Mute During Calls silences incoming radio audio while a phone call - or any other app - has the speaker, and Stop Transmitting During Calls cuts an in-progress transmission immediately so nobody hears half a private conversation. Both live in Settings → Audio. Everything returns to normal when the call ends, and you can still unmute by hand mid-call if you want to keep monitoring.
Can my PTT button work when the screen is locked?
Yes. Bind a hardware key or Bluetooth button under Settings → Radio → Hardware Buttons - as PTT, or as Previous/Next to change talkgroup - then turn on Talk while screen is locked. Volume keys additionally need the Z3DMR PTT accessibility service, because that's the only way Android lets an app see them in the background. It's used for exactly one thing - noticing the keys you bound - and never reads your screen or collects data. Turn it off any time in Android's Accessibility settings.
Are my calls private?
No - and that's by regulation, not a bug. Amateur-radio transmissions must not be encrypted, so anything you say can be heard by other operators on the talkgroup, and your callsign and DMR ID are visible. Even "private" calls are simply routed 1-to-1, not encrypted.
What is an ESSID and which one should I use?
A two-digit suffix (01-99) appended to your DMR ID so networks can tell your simultaneous connections apart - phone, hotspot, second app. If Z3DMR is your only such connection, any two-digit value is fine.
Why do I only see some talkgroups?
Each DMR network (BrandMeister, FreeDMR, DMR+ IPSC2, ADN Systems and others) has its own talkgroups, and you can only reach the ones on the network your server belongs to. Z3DMR reads the network from the master server you pick and automatically filters the talkgroup list to it, so you never see groups you can't use - the colour-coded network badge shows which network is active. Want a different network's talkgroups? Pick a server that belongs to that network.
Does it work over mobile data? How much does it use?
Yes, Wi-Fi and mobile data both work. DMR voice is very compact; data usage stays modest, and you can watch the exact numbers in Settings → Network.
Can I use a Bluetooth PTT button?
Yes - bind any hardware key or Bluetooth headset/handheld button under Settings → Radio → Hardware Buttons, as PTT or as Previous/Next for changing talkgroup. Enable PTT Wake & Focus to have the button wake the screen and bring Z3DMR to the front.
Does Z3DMR use my location? Can I put my station on APRS?
Only if you allow it. Location is optional. With permission, Z3DMR reports your Maidenhead grid locator to the DMR network when you connect, and - if you switch it on under Settings → APRS - beacons your position to the public APRS-IS network so you appear on aprs.fi. Without the permission it sends placeholder values, and APRS beaconing is off by default.
Can I back up or move my profiles to another phone?
Yes. In the Profiles tab, Export saves all your profiles to a file and Import loads them back. Import replaces your current profiles, so it's disabled while a profile is connected, and the exported file holds your passwords in plain text - keep it somewhere safe. Separately, Settings → DMR Data backs up your talkgroups, contacts and saved servers, and Settings → System can export your app preferences.
Can I use my own DMR ID database?
Yes. Under Settings → DMR Data, enter the URL of your own DMR ID source. Z3DMR tries it first on every update - including the automatic daily one - and falls back to the built-in repository if the download fails, the source is invalid or it contains no records. The screen always shows which source the last update came from.
Getting help
Questions, feature requests or a bug to report? The community lives on Telegram - the developers read everything.
info · support · feature requests · bug reports