Гібридні мобільні додатки - це мобільні додатки, в яких при оформленні інтерфейсу і / або контенту використовуються web-технології, що дозволяє реалізувати багатоплатформовий підхід. Для чого потрібно гібридне додаток на App Inventor? Наприклад, для створення на основі вже наявного сайту версії під Android або доповнення рідного інтерфейсу віджетами або функціональністю, якої в ньому немає. Базові web-технології не можуть в повній мірі працювати з системними можливостями Android, а App Inventor може. Питання, створювати новий додаток на App Inventor або до вже наявної web-функціональності додати потрібні можливість для доступу до системи? App Inventor, як говорилося на попередньому заняття, не дуже підходить для цього, але, думаю, кому-томатеріал здасться цікавим.
Припустимо, у нас є html-файл зі скриптом, в якому реалізований інтерфейс програми і необхідна функціональність. Назвемо це фото web-модулем. Як в додатку відстежувати події, що відбуваються в ньому? В App Inventor немає механізму виклику процедур додатки з web-модулів, але можливий обмін даними через властивість WebViewString компонента WebView. Значить, в додатку можна використовувати таймер, в якому буде відслідковуватися вміст цієї властивості, змінюється при виникненні подій в web-модулі.
Обмін даними між web-модулем і додатком може відбуватися в обох напрямках, але не одночасно, а в так званому напівдуплексному режимі. Формат рядка обміну може бути таким:
Тип команди, параметри (ім'я викликається функції, ідентифікатор джерела події, дані та ін.)
У процедурі таймера програми необхідно перевіряти вміст рядка обміну і, якщо тип команди в ній вказує на те, що це відповідь від web-модуля (а не порожнє значення або запит web-модулю), зробити потрібні дії (рис.1).
Мал. 1. Обробка подій web-модуля.
Приклад демонструє обробку подій web-модуля і обмін даними між ним і додатком. Рядок, отримана від web-модуля, в першому параметрі містить слово response, а відправлена web-модулю - request.
Для поліпшення чуйності можна зменшити величину інтервалу таймера в поле TimerInterval.