Управление дублированием из другого приложения
Начиная с v1.8.4, ScreenOnAuto принимает три Intent, которые запускают, останавливают или переключают дублирование. Всё, что умеет отправлять Intent, — приложение автоматизации, ярлык на главном экране, скрипт через ADB, ваше собственное приложение — может с их помощью управлять дублированием, так что оно будет включаться вместе с остальными «поездочными» настройками, а не вручную.
Три действия
| Действие | Что делает |
|---|---|
idv.lzn.screenonauto.action.START_MIRROR |
Запускает дублирование. Ничего не делает, если оно уже запущено. |
idv.lzn.screenonauto.action.STOP_MIRROR |
Останавливает дублирование. Ничего не делает, если оно не запущено. |
idv.lzn.screenonauto.action.TOGGLE_MIRROR |
Останавливает, если запущено, и запускает, если нет. |
Повторять действие всегда безопасно. Запуск, отправленный уже работающему дублированию, игнорируется, а не разрушает сеанс и не создаёт его заново, поэтому то, что срабатывает при каждом подключении Bluetooth, не прервёт уже идущее дублирование.
В приложении автоматизации
Большинство приложений автоматизации предоставляют одни и те же элементы под своими названиями — обычно это действие «отправить Intent» с полями примерно такого вида:
| Поле | Значение |
|---|---|
| Action | одно из трёх действий выше |
| Package | idv.lzn.screenonauto |
| Class | idv.lzn.screenonauto.MirrorControlActivity (или …MirrorControlReceiver для широковещательного сообщения) |
| Target | Activity (или Broadcast) |
Используйте Activity, если нет причин поступить иначе, — в следующих двух разделах объясняется разница и почему на широковещательное сообщение нельзя полагаться для запуска дублирования. В любом случае поле Class обязательно: если оставить его пустым, широковещательное сообщение вообще не дойдёт.
Если что-то не работает, сначала попробуйте соответствующую команду ADB ниже. Так станет ясно, в чём проблема — в самом Intent или в приложении, которое его отправляет.
Запуск Activity (рекомендуется)
Отправьте действие в idv.lzn.screenonauto/.MirrorControlActivity как Activity:
adb shell am start -a idv.lzn.screenonauto.action.START_MIRROR \
-n idv.lzn.screenonauto/.MirrorControlActivity
ScreenOnAuto ничего не показывает на экране и не оставляет следов в списке недавних приложений. Запуск можно отправить и до того, как вы сядете в автомобиль, — дублирование подождёт и само продолжится, как только появится экран автомобиля.
ℹ️ Примечание Android всё равно запрашивает разрешение на захват экрана при запуске дублирования. Чтобы всё работало действительно без рук, один раз выдайте его заранее через ADB — см. Выдача разрешения на дублирование через ADB.
Отправка широковещательного сообщения
Те же три действия работают и как широковещательное сообщение (broadcast), но отправлять его
нужно в idv.lzn.screenonauto/.MirrorControlReceiver:
adb shell am broadcast -a idv.lzn.screenonauto.action.STOP_MIRROR \
-n idv.lzn.screenonauto/.MirrorControlReceiver
Остановка, отправленная таким образом, проходит совершенно незаметно — ни окна, ни мерцания.
Указывать компонент обязательно. Современный Android не доставляет широковещательное сообщение приложению, если отправитель не указал, для какого оно компонента, поэтому сообщение только с действием отбрасывается, и вообще ничего не происходит — без каких-либо ошибок.
⚠️ Внимание Запуск, отправленный широковещательным сообщением, ненадёжен, а если не срабатывает, то молча. Сначала нужно разрешить две вещи, и на многих телефонах обе по умолчанию выключены:
- Автозапуск. На многих телефонах управление питанием вообще не даёт будить приложение широковещательным сообщением. Найдите менеджер автозапуска в настройках батареи или диспетчера телефона и разрешите там ScreenOnAuto. Телефон может предупредить, что делать этого не стоит.
- Поверх других приложений. Выдайте это разрешение ScreenOnAuto в настройках приложения Android.
Если нужен только запуск, используйте Activity выше — ему не нужно ни то, ни другое.
Устранение неполадок
- Вообще ничего не происходит — проверьте, указан ли компонент. Широковещательное сообщение без него отбрасывается ещё до того, как до него доберётся ScreenOnAuto.
- Остановка работает, а запуск ничего не делает — вы отправляете широковещательное сообщение, и не хватает одного из двух разрешений из предупреждения выше. Отправляйте в Activity.
- Окно разрешения появляется каждый раз — так и должно быть, если не выдать его заранее через ADB.
- Запуск ничего не делает, когда дублирование уже идёт — тоже ожидаемо; см. выше.
Последнее обновление: