DMRConnectDMRConnect
Главная · Для разработчиков · Производителям раций

Кнопка PTT и другие кнопки рации

Чтобы рация работала с DMRConnect из коробки, её кнопка PTT должна дойти до приложения одним из способов ниже. Если вы делаете прошивку или выбираете железо, проще всего начать с раздела «Что сделать в прошивке».

Обновлено 19.10.2026 · клавиши с 1.x, сигналы PTT и кнопки в фоне с 2.1.0, Sonim с 2.2.0

Кому
производителям и продавцам POC-раций, защищённых телефонов, магнитол, авторам прошивок
Пакет приложения
ru.stackworks.dmr
В приложении
«Настройки», «Назначение кнопок»: PTT, группа вперёд и назад, скан, переключение группа или приват

Как нажатие доходит до приложения

ПутьКогда работаетЧто нужно от рации
Клавиша в окно приложенияDMRConnect на экранекнопка отдаёт обычный KeyEvent с честным нажатием и отпусканием
Служба специальных возможностейприложение свёрнуто, экран погашен или заблокированто же, плюс человек один раз включает службу DMRConnect в настройках Android
Широковещательный сигналпока работает служба связи DMRConnect, в любом состоянии экранапрошивка шлёт один из сигналов из таблицы ниже
Сигнал Sonimв любом состоянии экрана, приёмник объявлен в манифестеDMRConnect выбран в «Программируемых клавишах» рации
Медиакнопка гарнитурыв любом режиме, кроме режима автомагнитолыгарнитура или Bluetooth-пульт с кнопкой воспроизведения

Клавиши

Любую кнопку, которая приходит в Android обычным KeyEvent, человек назначает сам: «Настройки», «Назначение кнопок», «Назначить» и нажать кнопку на рации. Приложение показывает, какая кнопка поймана, в том числе если это был сигнал рации, а не клавиша. Кроме PTT так же назначаются шаг группы вперёд и назад, скан и переключение «группа / приват».

Там же выбирается, как работает PTT: «Удержание» (зажал - говоришь) или «Переключатель» (клик - передача, ещё клик - приём). Выбор действует и на клавиши, и на сигналы рации. Для Bluetooth-пультов, которые шлют кнопки громкости, есть пункт «Кнопки громкости = PTT», он работает, пока приложение на экране.

Для PTT в режиме удержания важно, чтобы рация присылала нажатие и отпускание как есть: ACTION_DOWN в момент нажатия, повторы при удержании и ACTION_UP при отпускании. Бывает, что кнопка в зажатом виде шлёт частые пары «нажата-отпущена», так делают некоторые магнитолы. Приложение это выдерживает: отпускание засчитывается только если за 380 мс не пришло нового нажатия.

Если прошивка отдаёт приложению только долгое нажатие с флагом FLAG_CANCELED при отпускании, как Sonim на Motorola LEX F10, клавишей PTT работать не будет. Тогда нужен сигнал из следующего раздела.

Служба специальных возможностей DMRConnect нужна только для кнопок в фоне. Она не читает экран и ничего не нажимает: смотрит лишь на клавиши, которые человек сам назначил, остальные пропускает дальше. Когда приложение на экране, клавишу ловит само окно, служба её не трогает, иначе нажатие сработало бы дважды.

Широковещательные сигналы

Многие POC-рации забирают PTT себе и рассылают сигнал, а обычный KeyEvent стороннему приложению не доходит. DMRConnect слушает такие сигналы без всякого назначения в настройках, пока работает его служба связи. Набор сверен с приложениями, у которых кнопка на этих рациях работает.

Сигнал (action)Что внутриЧьи рации
android.intent.action.PTT.down
android.intent.action.PTT.up
ничего, само действие говорит «нажата» или «отпущена»многие китайские POC
android.intent.action.PTT_DOWN
android.intent.action.PTT_UP
то же, вариант написаниямногие китайские POC
com.zello.ptt.down
com.zello.ptt.up
ничегорации, которые поддерживают Zello: HIROYASU HI-B8, smartship и другие
com.mcx.intent.action.CRITICAL_COMMUNICATION_CONTROL_KEYandroid.intent.extra.KEY_EVENT с обычным KeyEvent; учитываются ACTION_DOWN без повторов и ACTION_UPMCX, стандарт 3GPP для служебной связи: Hytera P60 и другие
com.meigsmart.meigkeyaccessibility.onkeyeventkeycode (int) 142 - PTT, action (int) 0 нажата, 1 отпущена. keycode 292 и 293 - крутилка вперёд и назадрации на модулях MeiG
com.sonim.intent.action.PTT_KEY_DOWN
com.sonim.intent.action.PTT_KEY_UP
android.intent.extra.KEY_EVENTSonim и Motorola LEX F10

Сигнал Sonim устроен иначе остальных. Прошивка Sonim отдаёт PTT одному приложению, выбранному в настройках «Программируемые клавиши», а в этот список попадают только приложения с приёмником в манифесте. Поэтому у DMRConnect этот приёмник объявлен в манифесте, и сигнал доходит в любом состоянии экрана, в том числе на заблокированной рации. Человеку нужно один раз выбрать DMRConnect в этих настройках.

Проверить без рации

Сигналы можно послать с компьютера через adb на любой телефон с DMRConnect. Подключитесь к серверу с попугаем в приложении и отправьте нажатие, через пару секунд отпускание.

adb shell am broadcast -p ru.stackworks.dmr -a android.intent.action.PTT.down
adb shell am broadcast -p ru.stackworks.dmr -a android.intent.action.PTT.up

adb shell am broadcast -p ru.stackworks.dmr -a com.zello.ptt.down
adb shell am broadcast -p ru.stackworks.dmr -a com.zello.ptt.up

# MeiG: PTT нажата, отпущена, крутилка вперёд
adb shell am broadcast -p ru.stackworks.dmr -a com.meigsmart.meigkeyaccessibility.onkeyevent --ei keycode 142 --ei action 0
adb shell am broadcast -p ru.stackworks.dmr -a com.meigsmart.meigkeyaccessibility.onkeyevent --ei keycode 142 --ei action 1
adb shell am broadcast -p ru.stackworks.dmr -a com.meigsmart.meigkeyaccessibility.onkeyevent --ei keycode 292

# Sonim
adb shell am broadcast -p ru.stackworks.dmr -a com.sonim.intent.action.PTT_KEY_DOWN
adb shell am broadcast -p ru.stackworks.dmr -a com.sonim.intent.action.PTT_KEY_UP

Ключ -p адресует сигнал именно DMRConnect: на Android 8 и новее неадресованные сигналы приёмникам из манифеста не доставляются. Сигнал MCX несёт внутри объект KeyEvent, его из командной строки не собрать, проверяйте на рации.

Гарнитуры и Bluetooth

Кнопки гарнитуры и Bluetooth-пультов приходят как медиакнопки: HEADSETHOOK, MEDIA_PLAY_PAUSE, MEDIA_PLAY, MEDIA_PAUSE, MEDIA_STOP, MEDIA_NEXT, MEDIA_PREVIOUS, перемотка. Удерживать их честно почти никогда нельзя, гарнитура шлёт короткий клик. Поэтому для них PTT работает переключателем: клик - передача пошла, ещё клик - закончилась. Чтобы кнопка работала и в фоне, приложение держит медиасессию, пока такая кнопка назначена. В режиме автомагнитолы медиасессия не включается: она перехватывала штатную громкость магнитолы.

Что сделать в прошивке

Если вы производитель или собираете прошивку, вот варианты в порядке нашего предпочтения.

  1. Отдавать кнопку PTT обычным KeyEvent с честным нажатием и отпусканием, со своим кодом в .kl. Это работает в любом приложении, человек назначает кнопку за секунду.
  2. Если PTT забирает ваше приложение, дополнительно рассылать android.intent.action.PTT.down и .up. Сигнал без параметров понимают DMRConnect и многие другие клиенты.
  3. Если рассылка адресная, как у Sonim, дайте пользователю выбрать приложение в настройках и шлите сигнал с указанием пакета.

Пришлите нам модель и код кнопки, и мы добавим рацию в профили: тогда PTT заработает сразу после установки, без назначения. Как снять коды кнопок без adb, рассказано в статье «Новая рация».

Рации, которые приложение знает по модели

Для этих моделей DMRConnect сам выбирает интерфейс и назначает кнопки по Build.MODEL. Сохранённое человеком назначение всегда главнее умолчания.

Build.MODELРацияPTTЧто ещё
HYT-P50, HYT-P50 ProHytera P50, P50 Proклавиша 132 (F2)без сенсора, кнопочный интерфейс
HYT-P60Hytera P60клавиша 634сигнал MCX тоже принимается
UNIWA_F400UNIWA F400клавиша 132 (F2)-
HI-B8, m3_hHIROYASU HI-B8, smartshipсигнал Zelloкрутилка: клавиши 133 и 134, компактный режим POC
LEX F10Motorola LEX F10сигнал Sonimнужна сборка для Android 5.1-6

У HI-B8 клавиша 261 тоже приходит, но её мы специально не назначаем: рация шлёт и клавишу, и сигнал Zello, и одно нажатие сработало бы дважды.

Нашли неточность или не хватает функции? Напишите в группу DMRConnect, поправим справочник.