Найти в Дзене
Потребитель

Минимальный виджет в Basic4Android

Ниже — описание создания виджета, который не делает вообще ничего, а только отображается на рабочем столе телефона. Для разработки виджета в B4A можно использовать проект «по умолчанию» — это стандартный тип минимального Android-приложения. После создания проекта заходим в меню «Конструктор» и проектируем внешний вид виджета. В самом простейшем случае добавляем на холст Activity элемент «Panel» (панель должна быть обязательно, как родительский элемент для всего остального), а на него — элемент «Label» (поле надписи). Иерархия визуальных элементов в Конструкторе должна быть примерно следующей: Activity => Panel1=> Label1. В свойстве «Text» элемента «Label» можно сразу написать «Привет, widget!». В окне «Modules» в IDE добавляем новый модуль через контекстное меню «Добавить новый модуль» - «Receiver Module» (это модуль определённого типа, который нам сейчас и нужен). Код модуля будет примерно следующим. Sub Process_Globals ' Вызывается при инициализации модуля, предназначена для объявлен

Ниже — описание создания виджета, который не делает вообще ничего, а только отображается на рабочем столе телефона.

Для разработки виджета в B4A можно использовать проект «по умолчанию» — это стандартный тип минимального Android-приложения.

После создания проекта заходим в меню «Конструктор» и проектируем внешний вид виджета. В самом простейшем случае добавляем на холст Activity элемент «Panel» (панель должна быть обязательно, как родительский элемент для всего остального), а на него — элемент «Label» (поле надписи). Иерархия визуальных элементов в Конструкторе должна быть примерно следующей: Activity => Panel1=> Label1.

В свойстве «Text» элемента «Label» можно сразу написать «Привет, widget!».

В окне «Modules» в IDE добавляем новый модуль через контекстное меню «Добавить новый модуль» - «Receiver Module» (это модуль определённого типа, который нам сейчас и нужен). Код модуля будет примерно следующим.

Sub Process_Globals
' Вызывается при инициализации модуля, предназначена для объявления общих переменных модуля.
Dim rv As RemoteViews
End Sub
'***************************************************
Sub Receiver_Create
' Вызывается один раз при старте функциональности ресивера, первый шаг после Process_Globals.
' Создаем виджет, связываем с layout, обрабатываем события, устанавливаем интервал обновления (0 - не обновлять) и имя виджета
rv = ConfigureHomeWidget("Layout", "rv", 0, "Мой Виджет")
End Sub
'***************************************************
Sub Receiver_Start (StartingIntent As Intent)
' сообщение Intent, которое привело к запуску этого сервиса
If rv.HandleWidgetEvents(StartingIntent) Then Return
End Sub
'***************************************************
Sub rv_RequestUpdate
' Обработка запроса на обновление виджета - после добавления виджета на экран, после перезагрузки устройства, в соответствии с заданным интервалом обновления (если он задан) или после обновления приложения
rv.UpdateWidget
End Sub
'***************************************************
Sub rv_Disabled
' Обработка отключения виджета, когда последний экземпляр нашего виджета удаляется с экрана
StopService("")
End Sub
'***************************************************
'Called when an intent is received.
'Do not assume that anything else, including the starter service, has run before this method.
Private Sub Receiver_Receive (FirstTime As Boolean, StartingIntent As Intent)
' Вызывается каждый раз, когда система посылает широковещательное сообщение (Broadcast), которое зарегистрировано для данного ресивера
End Sub

Самая важная строка здесь — вызов метода ConfigureHomeWidget, который и создаёт виджет.

Первый параметр — имя файла макета, в котором мы спроектировали внешний вид виджета. Это двоичный файл с расширением .bal, который находится в папке проекта «Files». Имя файла передаётся в параметр как строка, без расширения имени файла (в примере выше — «Layout»).

Четвёртый параметр (в примере выше — «Мой Виджет») — имя виджета, как оно будет отображаться на телефоне после установки приложения.

Теперь можно собрать проект нажатием F5 в IDE и получить готовый APK для установки (он будет находиться в папке «Objects» проекта). Виджеты в B4A рекомендуется тестировать в режиме «Release» (в режиме отладки виджет не будет работать).

После установки приложения на телефон нужно зайти (тем или иным способом) в список имеющихся виджетов. Обычно в этом списке отображаются все установленные на телефоне приложения, которые имеют виджеты. В этом списке будет ваше приложение, а внутри него — список его виджетов (в данном случае — единственный «Мой Виджет»). Отсюда виджет устанавливается на рабочий стол телефона. Также виджет может устанавливаться из меню иконки самого приложения (команда «Добавить виджет»).

По умолчанию, тап по такому виджету будет открывать главную страницу приложения, которая будет на основе того же самого макета, что и сам виджет. Таким образом, если вы не предпримете ничего, кроме уже вышеописанного, на этой странице вы увидите ту же самую надпись «Привет, widget!».

При желании вы можете создать ещё один макет в Конструкторе IDE, а затем подхватить его в вызове Activity.LoadLayout("ИмяМакета") в процедуре Activity_Create в модуле Main. Тогда у вас будет отдельная от виджета главная страница приложения, на которой вы можете разместить и реализовать что угодно.

Конструктор макетов можно вызывать многократно (в каждом новом окне Конструктора будет редактироваться свой макет), а сохранённые в нём макеты будут появляться в папке «Files» проекта и подключаться к проекту в окне «Files Manager» как файлы .bal. В Конструкторе также есть команда «Файл» - «Сохранить как...», которая также приводит к созданию очередного макета.

Предыдущая статья о Basic4Android на этом же канале: Basic4Android: первые шаги.