Connecting to Supabase…

Tasker — отладка Play на BT-гарнитуре (пошагово)

Дата: 2026-06-23
Устройство: Pixel 6a, Tasker 6.6.20, Bluetooth-гарнитура
Цель: Play на гарнитуре → Tasker → (позже) AndroidChat → WpfChat 🎧 [tasker] PLAY
Проект отладки: BT Headset Debug (задача Headset Log Event, профили BT Headset Any / Play Pause / Play)

См. также: Tasker-BT-Key-Policy.md, Tasker-AI-BT-Key-Test-Prompt.md


0. Как это устроено (кратко)

Гарнитура Play
    → Android отдаёт кнопку одному «слушателю» (MediaSession)
    → Tasker (профиль Media Button + Grab) ИЛИ плеер (Spotify, YouTube…)
Компонент Роль
Tasker Permissions → Media Buttons Разрешение SET_MEDIA_KEY_LISTENER — Tasker может слушать кнопки
Профиль State → Media Button Реально перехватывает кнопку (с Grab)
Задача без профиля Сама по себе кнопки не ловит
Grab On Tasker забирает все media-кнопки → музыка/видео не получают Play
Grab Off Музыка может работать, но Tasker на Pixel часто не видит нажатие
AndroidChat «Захват гарнитуры» Отдельный перехват, независимо от Tasker

Подтверждено на Pixel 6a (2026-06):

  • Все профили Media Button OFF → Play в музыке работает
  • Любой профиль ON (с Grab) → Play в музыке не работает
  • BT Headset Any ON → задача запускается, Flash HS:%par1, но %par1 пустой
  • Media Buttons Revoked + reboot → музыка снова OK (Tasker не может слушать)

1. Подготовка (один раз)

1.1 Tasker Permissions — Media Buttons

Нужно для профилей State → Media Button.

Вариант A — утилита на ПК

  1. Скачать Tasker-Permissionstasker_permissions_portable.exe
  2. Телефон: Для разработчиков → отладка по USB или беспроводная отладка
  3. На ПК: adb devices → устройство в статусе device
  4. Запустить exe → вкладка TaskerMedia ButtonsGrant

Если exe пишет «The system cannot find the path specified» — adb не найден. Скопируйте в папку с exe из %LOCALAPPDATA%\Android\Sdk\platform-tools\: adb.exe, AdbWinApi.dll, AdbWinUsbApi.dll. Или используйте вариант B.

Вариант B — adb вручную (PowerShell)

adb shell pm grant net.dinglisch.android.taskerm android.permission.SET_MEDIA_KEY_LISTENER

Отозвать (вернуть музыку, если Tasker «залип»):

adb shell pm revoke net.dinglisch.android.taskerm android.permission.SET_MEDIA_KEY_LISTENER

После Grant/Revoke — перезапуск Tasker или reboot при странном поведении.

Grant All в утилите выдаёт и другие права (Secure Settings, Logs…). На Play/Pause влияет только Media Buttons.

1.2 AndroidChat (на время тестов Tasker)

Настройка Значение
Захват гарнитуры в AndroidChat OFF
Передавать кнопки в чат ON (когда дойдёте до Intent → WpfChat)

1.3 Tasker — мониторинг

  • Preferences → MonitorOn
  • Иконка Tasker в шторке не на паузе

2. Создание отладочной схемы в Tasker

2.1 Задача Headset Log Event

Минимальный набор действий (порядок важен):

# Действие Параметры
1 Flash p1=[%par1] e1=[%evtprm1] e2=[%evtprm2]Tasker Layout: Off
2 Variable Set %Hs_last%par1 (позже заменить на %evtprm1, если сработает)
3 Variable Set %Hs_time%TIME
4 Variable Set %Hs_log%Hs_log\n%DATE %TIME \| %par1
5 Flash HS:%par1

Импорт готового проекта (опционально): Docs/TaskerTasks/Outcoming/BT_Headset_Debug_Project.prj.xmlImport Project, не Data → Restore.

2.2 Профиль BT Headset Any (основной для отладки)

Поле Значение
Тип State → Hardware → Media Button
Button Any
Grab On
Stop Event On
Held Off
Задача Headset Log Event

2.3 Дополнительные профили (только для сравнения, по одному)

Профиль Button Когда использовать
BT Headset Play Pause Play Pause если Any даёт пустой %par1, но срабатывает
BT Headset Play Play редко совпадает с реальной кнопкой гарнитуры

Правило: в любой момент включён только ОДИН профиль Media Button.


3. Пошаговая диагностика

Шаг 1 — задача без гарнитуры (30 сек)

  1. TASKS → Headset Log Event → ▶ Run
  2. Если спросит %par1 — введите Play
Результат Вывод
Flash p1=[Play] … Задача OK
Буквально p1=[%par1] без ввода Нормально при Run без параметра
Ничего Проверить действия / Flash отключён

Шаг 2 — гарнитура, профиль Any (1 мин)

  1. Только BT Headset AnyON, остальные Media Button → OFF
  2. Домашний экран (музыка закрыта, ничего не играет)
  3. Play на гарнитуре
Результат Вывод
Flash HS:… или диагностический toast Профиль срабатывает
p1=[] и e1=[] — всё пусто Известная проблема Pixel: %par1 пустой на State → шаг 4
Ничего Шаг 3 (восстановление)
Музыка в плеере не Play, но toast есть Ожидаемо при Grab On

Шаг 3 — если нет реакции на гарнитуре

Проверить по порядку:

  1. BT Headset Any = ON (State, не Event — если Event ещё не настраивали)
  2. Button = Any, Grab = On
  3. Tasker Permissions → Media Buttons = Granted
  4. AndroidChat → захват гарнитуры OFF
  5. Tasker → Run Log (☰ → More → Run Log) → Play на гарнитуре
Run Log Действие
Есть Headset Log Event Профиль OK, смотреть Flash / переменные
Пусто Профиль не ловит → п.1–4, reboot, переустановить Grant

Шаг 4 — пустой %par1 (подтверждено на Pixel 6a)

Симптом: toast HS:%par1 буквально или p1=[] e1=[] при срабатывании профиля.

Причина: State → Media Button на Android 14 часто не передаёт имя кнопки в %par1. Массив %evtprm заполняется у Event, не у State.

Попробовать профиль Event:

  1. Создать профиль BT Headset Event Any
  2. Тип: Event → Hardware → Media Button → Button Any
  3. Задача: та же Headset Log Event
  4. BT Headset Any (State) → OFF
  5. Только Event-профиль ON → Play на гарнитуре
Flash Дальше
e1=[Play] / Play Pause / похожее В задаче использовать %evtprm1 вместо %par1
Всё пусто Run Log, форум Tasker / AutoVoice Button (см. §6)

Правка задачи после успеха Event:

Variable Set %Hs_btn ← %evtprm1
Flash HS:%Hs_btn
If %Hs_btn ~ *play* → … Intent в AndroidChat

Шаг 5 — проверка «музыка vs Tasker»

Профили Media Button Media Buttons Ожидание
Все OFF Granted Музыка OK, Tasker молчит
Any ON, Grab On Granted Музыка ломается, toast от Tasker
Все OFF Revoked + reboot Музыка OK, Tasker не слушает

Это нормальное поведение Grab, не баг Permissions.


4. Типичные ошибки

Ошибка Как должно быть
Несколько профилей Media Button ON Только один
Button = Play Чаще нужен Play Pause или Any
Play / Play Pause ON без Any Grab блокирует музыку, задача не стартует (фильтр не совпал) — toast нет
Тест в Spotify при Grab Off Кнопка уходит в плеер, Tasker молчит
Захват гарнитуры в AndroidChat ON Конфликт с Tasker
Event вместо State без проверки На Pixel Event может молчать — сначала State Any
Ручной ▶ Run без %par1 Пустые скобки — не тест гарнитуры
Задача без профиля Кнопки не перехватываются

5. Режимы работы (практика)

Отладка гарнитуры (короткая сессия)

  1. Media Buttons → Granted
  2. Один профиль ON (лучше BT Headset Any или Event Any)
  3. Grab On для гарантированного перехвата
  4. Домашний экран или тестовый Flash
  5. Записать реальное имя кнопки (%evtprm1 / Run Log)

Обычное использование телефона

  1. Все профили Media Button → OFF
  2. При необходимости: Media Buttons → Revoked (если музыка странная после тестов)
  3. Проверить: Play/Pause в YouTube / музыке работает

Напоминание: после сессии с Tasker выключите профили BT — иначе Play на гарнитуре не дойдёт до плееров. См. Tasker-BT-Key-Policy.md.

Целевая схема WpfChat (когда имя кнопки известно)

  1. Профиль → Headset Log Event или BT Key Debug
  2. If %Hs_btn ~ *play* (или точное имя с гарнитуры) → Stop для остальных
  3. Send Intent → com.taskertowpf.androidchat.HEADSET_BUTTON, extra button=%Hs_btn
  4. AndroidChat: захват OFF, передача кнопок ON
  5. Профиль OFF, когда голос/чат не нужны

6. Запасные пути

Если State и Event дают пустые параметры:

  1. AutoVoice → Plugin → Button → Bluetooth → Play/Pause (не требует Media Buttons так же жёстко)
  2. AndroidChat с захватом ON, все профили Tasker OFF — проверить, доходит ли 🎧 до WpfChat (тест железа)
  3. Tasker → Action Media → Media Button Events (временный regrab в задаче)
  4. Экспорт с телефона → Docs/TaskerTasks/Incoming/ → сравнение с backup2.xml

7. Чеклист перед отчётом в чат

  • [ ] Какие профили ON / OFF
  • [ ] State или Event
  • [ ] Grab On/Off
  • [ ] Media Buttons Granted/Revoked
  • [ ] Результат теста ▶ Run с Play
  • [ ] Текст Flash с гарнитуры (p1=… e1=…)
  • [ ] Строка в Run Log при нажатии
  • [ ] Захват гарнитуры в AndroidChat

8. Связанные файлы в репозитории

Файл Назначение
Docs/TaskerTasks/Outcoming/BT_Headset_Debug_Project.prj.xml Проект отладки (профили + Scene + задачи)
Docs/TaskerTasks/Outcoming/BT_Headset_Any.prf.xml Один профиль Any
Docs/TaskerTasks/build_bt_headset_debug.py Пересборка XML
Docs/MD_Files/Tasker-BT-Key-Policy.md Политика Grab и выключение профилей
Docs/MD_Files/Tasker-AI-BT-Key-Test-Prompt.md Короткие промпты для Tasker AI

Краткая шпаргалка

Permissions: Media Buttons Grant
Профиль:     State → Media Button → Any → Grab On → Headset Log Event
Тест:        Домашний экран → Play → смотреть Flash и Run Log
Пустой par1: Попробовать Event + %evtprm1
После теста: Профили OFF (музыка снова работает)