Краткое руководство по использованию виджетов в myMjDM
(в конце поста можно скачать это руководство в формате .
pdf)
Виджет представляет собой либо "скриншот" web-страницы, либо кнопку. И на то и на другое можно повесить действие по клику.
Сразу после создания виджета вам будет предложено выбрать его тип.
Сменить тип виджета можно будет в дальнейшем в любой момент, настройки предыдущего типа также не будут потеряны.
Рассмотрим подробнее...
1.

- Screenshot_20191125-143229.png (91.37 КБ) 24475 просмотров
Вам будет предложено ввести url, который виджет будет загружать скрытно в память и делать с него скриншот, который потом появится в окне самого виджета в виде обычной картинки (bitmap).
Скорость отображения картинки напрямую зависит от сложности и объема загружаемой страницы, а также скорости подключения устройства к серверу, с которого грузится страница.
Тут сразу следует заметить, что функционал никак не ограничивается загрузкой сцен с Вашего сервера MajorDomo. Вы можете грузить в виджет что угодно - сайты с погодой, новостями, страницы с форумов и т.п... лишь бы WEB-объект не поперхнулся запрошенным объемом.
Также предусмотрен параметр задания периода обновления страницы - в секундах. Если вы загружаете довольно объемные страницы, - не следует злоупотреблять данным параметром. В конечном итоге это как минимум выразится в более быстром исчерпании заряда аккумулятора или истраченном интернет-трафике. По умолчанию предлагается обновлять раз в 300 секунд (5 минут).
Для примера, Ваша сценка для периодического обновления может выглядеть как-то так:

- screenshot-2019-11-25-144903.png (247.94 КБ) 24472 просмотра
С помощью кнопочки справа сверху можно принудительно обновить содержимое виджета.
Если данная кнопка скрыта в Настройках, все-равно можно нажимать на правый верхний уголок виджета для обновления содержимого.
Время обновления показывается слева сверху. По клику на этой области можно скрывать/отображать данный параметр.
Обратите внимание, что то, как виджет отображает вашу страничку напрямую зависит от того, как вы её сверстали.
Чтобы в большинстве случаев отображение проходило удачно, виджет при рендеринге использует масштабирование указанное в самом html-коде и использует фактор скалирования = 1.
Так, например, вот такое отображение вовсе не является глюком или ошибкой:

- screenshot-web-scale.png (83.12 КБ) 24470 просмотров
Просто, страница у вас при 100% отображении браузером занимает меньшую площадь, чем может вместить web-объект, и он, как и в настольном браузере заполняет оставшееся поле белым цветом.
Вы легко можете исправить ситуацию, если в настройке сцены поставите галку "Автоматически изменять размер сцены по ширине экрана".

- screenshot-mjdm-admin.png (162.71 КБ) 24470 просмотров
Правда, бывают случаи, когда эту галку, наоборот, целесообразно снять. Для тех, кто не любит писать html-код сам и не разбирается в css – просто экспериментируйте. В любом случае имеет смысл создавать изначально большие сцены с разрешением не хуже 1280х800. Это избавит вас от проблем на подавляющем большинстве устройств.
Безусловно, случаются и неразрешимые ситуации, когда виджет ну никак не желает вмещать в себя страницу. Зачастую это связано и с тем, как само устройство отображает и масштабирует виджеты на рабочем столе (видение данного вопроса изготовителем устройства). Но вы всегда можете подредактировать заголовок своей страницы таким образом, чтобы Ваша страница именно у Вас отображалась как вам нужно. Ну... или изобрести что-то своё, подходящее под ваше оформление, чтобы вид страницы сочетался с прочими элементами.
Если чего-то будет не хватать, в будущем рассмотрим возможность добавить каких-нибудь полезных настроек, которые помогут лучше разместить страницы в плоскости виджета в различных ситуациях.
С code version 14 в Настройках виджета появилась опция:

- ----1.png (18.49 КБ) 24074 просмотра
Думаю, из примера ниже все становится понятно. Теперь можно сохранять геометрию исходной страницы, а не растягивать ее на плоскость виджета. Удобно, красиво. Но следует учесть, что если площадь картинки маленькая, элементы управления могут "повиснуть" в воздухе.

- ---------.png (450.23 КБ) 24076 просмотров
(!) Важные замечания по поводу безопасности
в Android, начиная с поколения 6.1 "Marshmallow" ввели необходимость дополнительного запроса разрешений у пользователя.
Текущая реализация WEB-виджетов требует разрешения "Разрешить отображать поверх" ("Allow display over other apps"). При размещении виджета данного типа у вас будет запрошено это разрешение.
Если вдруг в процессе работы на устройстве по каким-то причинам для вас это окажется неприемлемым - вы всегда можете запретить данную функцию в Настройках приложения. Уже созданные виджеты отобразят предупреждение на эту тему.
Ну и также, в строке уведомлений вполне вероятно вам будет показываться значок, что служба myMjDM работает в фоновом режиме:

- Screenshot_20191125-143410---.png (70.98 КБ) 24467 просмотров
Если он надоест, скрыть его можно штатными средствами Андроид.
Пользователей Android 4.4 и 5.0 данное замечание в принципе не касается, там указанные права разрешены автоматически.
2.

- Screenshot_20191125-143349.png (102.33 КБ) 24452 просмотра
В этом случае вместо скриншота страницы будет размещена обычная кнопка с однородным фоном и надписью, которую вы задаете самостоятельно.
В тексте надписи поддерживается мультистрока (переносы кодом
\n).
Также можно поиграться цветом шрифта, фоном и прозрачностью.
Виджеты данного типа не требуют никаких дополнительных системных разрешений в отличие от web-виджетов
-----
Что касается выполнения действий по нажатию на виджет - тут все просто.
В настоящий момент виджет умеет -
- либо открывать программу myMjDM
- либо выполнять указанную ссылку (скрытно)
- либо ничего не делать вообще (если поле ссылки пустое)
В простейшем случае вы можете задать обработку какого-то действия через сервер MajorDomo.
Ну, например, выполнение метода switch для какого-либо объекта:
http://majordomo_адрес/objects?object=ИМЯОБЪЕКТА&op=m&m=switch
Включить свет, открыть ворота, выполнить какой-то сценарий, и т.п... - все это сюда отлично подходит.
О результате выполнения действия вы будете оповещены стандартным системным всплывающим сообщением (настраивается). Можно также в качестве отклика нажатия добавить воспроизведение звука или вибрацию.
Разумеется, тут тоже можно писать любые ссылки. Хоть
http://google.ru . Просто, созерцать результат выполнения подобного "действия" будет весьма скучно...

- виджет скрытно откроет google и потом уничтожит объект в памяти; по его мнению, все прошло великолепно и действие выполнено.
Таким, образом, например какая-то часть вашего рабочего стола с нужными вам виджетами может выглядеть как-то так...

- Screenshot_20191125-143410.png (516.83 КБ) 24463 просмотра
C версии приложения 0.9.8 build 399 в этот контекст добавлена новая полезная функция - возможность обновить любой указанный виджет по окончании выполнения действия.
Тут нам очень пригодится системный идентификатор виджета (его уникальный номер в системе). При настройке виджета (справа вверху) и в системных сообщениях от виджетов вы как раз его и видите - некий номер #NN (с решеточкой впереди).
Это и есть системный номер данного виджета на вашем устройстве. В ряде случаев с помощью него удобно отслеживать, какой виджет откликнулся на действие, а также указывать номер нужного виджета в поле данной функции.
Пример
Я сделал себе виджет, по нажатию на который будет включаться свет под навесом.
Подъезжая вечером к воротам, мне удобно нажать на телефоне кнопку, чтобы зажегся свет и удобно было заехать без лишних манипуляций.
Да, безусловно, вы возразите, что можно включать свет кучей других способов. Например, отслеживая свое местоположение по GPS-трекеру, или распознавая образ и номер машины по видеокамере.
Все так, но в данном случае разберем как сделать интерактивную кнопку прямо на рабочем столе карманного гаджета.
- Создал сценку с подложкой (контейнером) 684 х 415. У меня это самый подходящий размер окна браузера, чтобы не появлялся белый фон по краям.
- Разместил внутри этого объекта нужные мне html-блоки. А именно 4 переключателя в виде лампочек и картинку самого навеса (для симпатичности)

- scene14.png (24.42 КБ) 24269 просмотров

- Screenshot_20191129-152924.png (411.99 КБ) 24285 просмотров
- Настроил виджет как WEB-виджет. Обозначил действие, которое по ссылке "кликает" основное свойство объекта, которое уже включает весь свет под навесом. И там же обозначил, что по выполнении действия мне надо обновлять этот же самый виджет (в моем случае #84)

- Screenshot_20191129-153006.png (114.59 КБ) 24284 просмотра
- Теперь при клике происходит вкл/выкл всего света под навесом

- Screenshot_20191129-153020.png (267.89 КБ) 24283 просмотра
Время автообновления виджета оставил по-умолчанию (300 секунд), чтобы в виджете иногда отображалось актуальное состояние освещения, на случай, если кто-то зажжет свет выключателем или с другого терминала...
-----
FAQ по виджетам
Q: После перезагрузки устройства часть виджетов некоторое время белые, а часть вроде сразу нормальные... Отчего так?
A: Давайте разберемся

- ---Screenshot_20191206-172333.jpg (81.09 КБ) 23935 просмотров

- ---Screenshot_20191206-172340.jpg (128.18 КБ) 23935 просмотров
Связано это с тем, что после перезагрузки процессор аппарата очень сильно загружен (догружаются прочие программы, запускаются процессы и т.п.). И в этот момент система дает команду на обновление размещенных на столе виджетов. Виджет пытается открыть страницу в памяти устройства, но процессорного времени ему не хватает, поскольку система не дает ему приоритет, и страница не успевает догрузиться... Но отобразить-то хоть что-то нужно? И в итоге он отображает "белый экран" браузера. Зачастую можно даже получить искаженный вид страницы (недогруз некоторых элементов или сбитую разметку).
В данном случае или можно подождать следующего цикла обновления, скорее всего аппарат уже "успокоится" и будет более отзывчиво обрабатывать запросы системы, либо просто обновить виджет в-ручную, нажав справа сверху значок "Обновить".
Q: На моем стареньком китайском планшете при создании виджета появляется надпись "Не удалось загрузить виджет". Что-то можно с этим сделать?
A: Дело в том, что обслуживание работоспособности виджетов - задача приложения, которое обеспечивает вам "Главный экран". Ну, или как его более правильно называть - Launcher (Лаунчер).
Если такое явление происходит, значит он неверно трактует параметры отображения виджета. Например, такое явление присутствует на некоторых старых китайских автомобильных Android-магнитолах. Выглядит это так:

- Screenshot_2019-11-26-08-47-50.png (158.8 КБ) 24287 просмотров
Возможные решения:
- После создания такого виджета - тупо перезагрузить устройство. Вероятность довольно велика, что после перезагрузки вижет отобразится как ни в чем ни бывало. И все последующие виджеты будут создаваться корректно.
- Попробовать поставить какой-то другой лаунчер.
Q: Я переустановил приложение и хотел восстановить настройки виджетов. Наделал новых (пустых), запустил восстановление... но почему-то часть виджетов осталась ненастроенными. Что мне делать?
A: Давайте разберемся.
По всей видимости когда-то вы пытались создавать виджеты, но не продвигались дальше экрана начальной настройки, и отказывались от создания виджета. Возможно в этот момент происходил какой-то сбой или вы срубали приложение (тут сложно предположить, что может послужить причиной, но такое случается в Android), и в итоге в хранилище самого приложения отмечалось, что виджет создан, хотя на самом деле его нет. Получается такой своеобразный "скрытый" виджет, который нигде не отображается и при этом не функционирует, хотя само приложение "знает" о его существовании, но ему на него по большому счету наплевать... ну есть и есть.
Чтобы избавиться от таких "фантомных виджетов" следует полностью переустановить приложение. Удалите приложение с очисткой даннйх и кэша и установите вновь. Фантомные виджеты погибнут.

- cache.PNG (24.89 КБ) 15786 просмотров
Q: На MIUI 12 (Android 10/11) перестали нажиматься виджеты
A: Все дело либо в системных правах, либо в энергосбережении.
И это может касаться не только данного приложения, а любого другого, использующего более-менее сложные виджеты, отображающие какую-либо "живую" информацию или откликающиеся на нажатия.
В первом случае нужно разрешить всплывающие окна в фоновом режиме. Это должно быть обязательно включено для приложения, предоставляющего данный виджет.

- IMG_20210121_142713.jpg (38.03 КБ) 13804 просмотра
Во втором случае скорее всего нужно выключить оптимизацию расхода для данного приложения

- sams_energo.PNG (116.98 КБ) 13804 просмотра
Прикладываю вариант краткой документации в формате .pdf