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

B4A, работаем с виджетами и сетью Wi-Fi

Чтобы использовать в коде функцию Log(Message As String), которая выводит произвольные сообщения на вкладку Logs в IDE (для целей отладки), нужно добавить следующую директиву в раздел Project Attributes в модуле Main. #BridgeLogger: True После этого функция Log будет работать и в режиме Release (а не только в режиме Debug), если приложение устанавливается на устройство с помощью B4A-Bridge. Чтобы программно закрыть главную страницу приложения, можно использовать команду наподобие следующей. Activity.Finish Эта команда может быть использована в конце любой процедуры, например, обрабатывающей нажатие на какую-либо кнопку — в результате страница приложения будет закрыта. Эта команда может быть использована в процедуре Activity_Create модуля Main, как единственная (даже без обычного вызова Activity.LoadLayout). В этом случае главная страница приложения вообще не запустится, а только «моргнёт» при попытке запуска. Это может пригодиться для приложений, где, например, нужны только виджеты. Чт
Оглавление

Лог отладки

Чтобы использовать в коде функцию Log(Message As String), которая выводит произвольные сообщения на вкладку Logs в IDE (для целей отладки), нужно добавить следующую директиву в раздел Project Attributes в модуле Main.

#BridgeLogger: True

После этого функция Log будет работать и в режиме Release (а не только в режиме Debug), если приложение устанавливается на устройство с помощью B4A-Bridge.

Закрыть приложение

Чтобы программно закрыть главную страницу приложения, можно использовать команду наподобие следующей.

Activity.Finish

Эта команда может быть использована в конце любой процедуры, например, обрабатывающей нажатие на какую-либо кнопку — в результате страница приложения будет закрыта.

Эта команда может быть использована в процедуре Activity_Create модуля Main, как единственная (даже без обычного вызова Activity.LoadLayout). В этом случае главная страница приложения вообще не запустится, а только «моргнёт» при попытке запуска. Это может пригодиться для приложений, где, например, нужны только виджеты.

Работа с сетью Wi-Fi

Чтобы получить имя (SSID) подключённого на устройстве в данный момент Wi-Fi, можно использовать код наподобие следующего.

Dim R As Reflector ' потребуется библиотека Reflection
R.Target = R.GetContext
R.Target = R.RunMethod2("getSystemService","wifi","java.lang.String")
R.Target = R.RunMethod("getConnectionInfo")
Dim SSID As String = R.RunMethod("getSSID")

В результате будет возвращено <unknown ssid> (именно с угловыми скобками) если подключённого Wi-Fi нет, или нет нужных разрешений у приложения. В случае удачи метод getSSID возвращает имя Wi-Fi в кавычках. Чтобы обрезать ненужные первый и последний символы (упомянутые кавычки или скобки), можно использовать код наподобие следующего.

SSID.SubString2(1, SSID.Length - 1)

Для получения упомянутого SSID Wi-Fi приложению потребуются разрешения, которые можно задать в IDE в редакторе манифеста.

AddPermission(android.permission.ACCESS_NETWORK_STATE)
AddPermission(android.permission.ACCESS_WIFI_STATE)
AddPermission(android.permission.ACCESS_COARSE_LOCATION)
AddPermission(android.permission.ACCESS_FINE_LOCATION)
AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)

Чтобы обрабатывать системные события подключения-отключения к Wi-Fi, например, в модуле ресивера вашего виджета, можно использовать процедуру типа phoneEvents_ConnectivityChanged (NetworkType As String, State As String, Intent As Intent), где phoneEvents — объект из библиотеки Phone, который может быть объявлен и инициализирован следующим образом.

Dim phoneEvents As PhoneEvents ' например, в процедуре Process_Globals
phoneEvents.Initialize("phoneEvents") ' например, в процедуре Receiver_Receive модуля ресивера

Параметр NetworkType будет передаваться в вышеупомянутую процедуру phoneEvents_ConnectivityChanged как "WIFI" или "MOBILE", а параметр State — как "CONNECTING", "CONNECTED", "SUSPENDED", "DISCONNECTING", "DISCONNECTED" или "UNKNOWN".

Виджет с возможностью изменения размеров

Чтобы дать пользователю возможность изменять размер виджета вашего приложения, достаточно добавить в Manifest Editor в IDE команду наподобие следующей.

CreateResource(xml, widgetreceiver_info.xml,
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:resizeMode="horizontal|vertical" />
)

В данном примере «widgetreceiver» (в имени файла «widgetreceiver_info.xml») — это имя модуля ресивера, в котором создаётся ваш виджет. Пример почерпнут из обсуждения (англ.) на форуме B4X.

Помимо вышеописанного параметра «android:resizeMode» желательно указать некоторые дополнительные параметры, иначе виджет может стать невидимым на условно старых телефонах (или других устройствах), где Андроид или его оболочка не поддерживают функцию изменения размеров виджетов, или просто недостаточно «продвинуты».

  • android:minWidth и android:minHeight — начальные размеры виджета.
  • android:minResizeWidth и android:minResizeHeight — минимальные размеры виджета.
  • android:maxResizeWidth и android:maxResizeHeight — максимальные размеры виджета.

Размеры задаются в «dp» (виртуальная единица, которая обеспечивает одинаковое отображение элементов интерфейса на разных устройствах — «density-independent pixel»), например, следующим образом.

android:minWidth="400dp"
android:minHeight="36dp"
android:minResizeWidth="36dp"
android:minResizeHeight="36dp"
android:maxResizeWidth="800dp"
android:maxResizeHeight="400dp"

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