Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание программного обеспечения для нательных компьютерных сетей и носимых систем. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
speechRecognizer.setRecognitionListener
(recognitionListener)
speechRecognizer.startListening(speechIntent)
```
Применение этих принципов и использование соответствующих API по­могут создать доступные и удобные интерфейсы для пользователей носимых устройств, вне зависимости от их потребностей и ограничений (рис. 4.4).
Рис. 4.4. Реализация эмуляции интерфейса фреймворка Kivy для создания простого
мобильного приложения с графическим интерфейсом
Приведенный код на Python использует фреймворк Kivy для создания простого мобильного приложения с графическим интерфейсом (рис. 4.4). Да­вайте разберем, что происходит в коде:
1. Импорт необходимых модулей:
```python
from kivy.app import App
from kivy.uix.button import Button
```
Здесь мы импортируем два класса из библиотеки Kivy. `App` – это базо-
вый класс для приложения Kivy, а `Button` – это виджет кнопки, который мы будем использовать в нашем интерфейсе.
2. Определение класса приложения:
```python
class MyApp(App):
```
111
Мы создаем наш собственный класс `MyApp`, который является под-
классом `App` из Kivy. Этот класс будет представлять наше приложение.
3. Метод `build`:
```python
def build(self):
return Button(text='Hello, Kivy!')
```
Этот метод определяет, как будет выглядеть главное окно приложения.
Здесь мы возвращаем экземпляр кнопки (`Button`) с текстом «Hello, Kivy!».
4. Проверка и запуск приложения:
```python
if __name__ == '__main__':
MyApp().run()
```
В этом блоке кода проверяется, запускается ли файл напрямую (а не
импортируется как модуль). Если файл запускается напрямую, то создается эк­земпляр класса `MyApp` и вызывается его метод `run()`, который запускает приложение.
Таким образом, весь код создает минимальное мобильное приложение с одной кнопкой и текстом «Hello, Kivy!», используя фреймворк Kivy. При за­пуске этого кода, вы должны увидеть окно с кнопкой, которую вы можете нажать.
Продолжим разработку простого приложения с использованием фрейм­ворка Kivy. В этот раз мы добавим обработчик события нажатия кнопки для вывода текста в консоль приложения. Также мы создадим еще один виджет, чтобы продемонстрировать вложенность интерфейсных элементов.
```python
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
class MyApp(App):
def build(self):
112
# Основной контейнер для размещения элементов интерфейса
layout = BoxLayout(orientation='vertical' , spacing=10, padding=10)
# Кнопка
button = Button(text='Нажми меня!')
# Привязываем обработчик события нажатия кнопки
button.bind(on_press=self.on_button_press)
# Метка для отображения текста
self.label = Label(text='Текст будет здесь')
# Добавляем элементы в основной контейнер
layout.add_widget(button)
layout.add_widget(self.label)
return layout
# Обработчик события нажатия кнопки
def on_button_press(self, instance):
print('Кнопка была нажата!')
self.label.text = 'Кнопка была нажата!'
if __name__ == '__main__':
MyApp().run()
```
В этом обновленном коде добавлены следующие изменения:
1. **Добавлен контейнер BoxLayout:**
```python
layout = BoxLayout(orientation='ve rt i cal', spacing=10, padding=10)
```
Мы создали `BoxLayout` (контейнер с вертикальной ориентацией) для
размещения элементов интерфейса. `spacing` и `padding` используются для до­бавления пространства между элементами и по краям контейнера соответ­ственно.
113
2. **Обработчик события нажатия кнопки:**
```python
def on_button_press(self, instance):
print('Кнопка была нажата!')
self.label.text = 'Кнопка была нажата!'
```
Мы добавили метод `on_button_press`, который будет вызываться при
нажатии кнопки. В этом методе мы просто выводим сообщение в консоль и об­новляем текст метки.
3. **Изменен код создания метки:**
```python
self.label = Label(text='Текст будет здесь')
```
Мы создали метку вне метода `build`, чтобы она была доступна в обра-
ботчике события нажатия кнопки. Теперь мы можем обновлять текст метки внутри метода `on_button_press`.
После запуска этого кода, вы должны увидеть мобильное приложение с кнопкой и меткой. При нажатии кнопки текст метки обновится, и сообщение будет выведено в консоль приложения [46].
Продолжим развитие приложения, добавив возможность ввода текста пользователем с использованием текстового поля (`TextInput`). Также мы доба­вим функцию, которая будет принимать введенный текст и отображать его в метке при нажатии кнопки [45].
```python
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
class MyApp(App):
def build(self):
# Основной контейнер для размещения элементов интерфейса
layout = BoxLayout(orientation='vertical' , spacing=10, padding=10)
114
# Текстовое поле для ввода
self.text_input = TextInput(multiline=False)
# Кнопка
button = Button(text='Показать текст')
# Привязываем обработчик события нажатия кнопки
button.bind(on_press=self.on_button_press)
# Метка для отображения текста
self.label = Label(text='Текст будет здесь')
# Добавляем элементы в основной контейнер
layout.add_widget(self.text_input)
layout.add_widget(button)
layout.add_widget(self.label)
return layout
# Обработчик события нажатия кнопки
def on_button_press(self, instance):
input_text = self.text_input.text
if input_text:
print(f'Введенный текст: {input_text}')
self.label.text = f'Введенный текст: {input_text}'
else:
print('Введите текст!')
if __name__ == '__main__':
MyApp().run()
```
Эти изменения включают:
1. **Добавлено текстовое поле (`TextInput`):**
```python
self.text_input = TextInput(multiline=False)
```
115
Мы создали `TextInput` для ввода текста пользователем.
`multiline=False` означает, что пользователь может вводить только одну строку текста.
2. **Обновлен метод `build`:**
```python
layout.add_widget(self.text_input)
```
Мы добавили текстовое поле в основной контейнер `BoxLayout`.
3. **Обновлен обработчик события нажатия кнопки:**
```python
def on_button_press(self, instance):
input_text = self.text_input.text
if input_text:
print(f'Введенный текст: {input_text}')
self.label.text = f'Введенный текст: {input_text}'
else:
print('Введите текст!')
```
В этом методе мы получаем текст из текстового поля и, если он не пу-
стой, выводим его в консоль и обновляем текст метки. Если текстовое поле пу­сто, выводим сообщение «Введите текст!» в консоль.
Теперь приложение позволяет пользователю вводить текст и отображает его при нажатии кнопки [4].
Рис. 4.5. Тестирование фреймворка Kivy эмулирующего работу аппаратной носимой системы
116

ГЛАВА 5. РАЗРАБОТКА КЛИЕНТ-СЕРВИСНОЙ ОРГАНИЗАЦИИ НАТЕЛЬНОЙ КОМПЬЮТЕРНОЙ СЕТИ (НА ПРИМЕРЕ watchOS)

5.1. Определение требований к клиент-сервисной архитектуре
Разработка клиент-сервисной архитектуры для носимых устройств, таких как умные часы на платформе watchOS, требует внимательного анализа и учета специфических требований. В данном разделе мы определим основные требо­вания к архитектуре для обеспечения эффективного взаимодействия клиент­ских и сервисных компонентов.
5.1.1. Идентификация ключевых потребностей пользователей
Понимание ключевых потребностей пользователей носимых устройств, особенно на платформе watchOS, играет решающую роль в разработке клиент­сервисной архитектуры. Важно учесть уникальные аспекты взаимодействия пользователей с умными часами. Вот некоторые из ключевых потребностей пользователей:
Разработка интерфейса, который легко понимается и управляется на не­больших экранах умных часов. Использование жестов и элементов управления, специфичных для watchOS.
Обеспечение возможности быстрого получения важных данных, таких как уведомления, без необходимости открытия приложения.
Предоставление возможности настройки и фильтрации уведомлений для минимизации вмешательства и обеспечения персонального опыта.
Создание механизмов быстрого доступа к приложениям и функциям с учетом ограниченных ресурсов устройства.
Обеспечение интеграции с другими устройствами в экосистеме Apple, та­кими как iPhone и iPad, для синхронизации данных и обмена информацией.
5.2. Проектирование пользовательского опыта
Проектирование пользовательского опыта (User Experience, UX) для но­симых устройств, таких как умные часы на платформе watchOS, требует особо­го внимания к ограничениям по размеру экрана и контексту использования. В данной главе рассматриваются ключевые аспекты, направленные на создание интуитивно понятного и удобного интерфейса для пользователя.
117
Одним из важных факторов при проектировании пользовательского опы­та для носимых устройств является упрощение взаимодействия. Умные часы обладают ограниченным пространством на экране, поэтому интерфейс должен быть минималистичным и легким для восприятия. Важно учесть, что пользова­тельский опыт на устройствах с такими размерами экрана должен быть макси­мально эффективным и интуитивным [43].
Еще одним аспектом является адаптация к уникальным возможностям носимого устройства. Например, использование жестов и датчиков для ввода данных, а также интеграция с голосовыми командами, позволяет расширить возможности взаимодействия пользователя с устройством.
Проектирование пользовательского опыта на платформе watchOS также включает в себя создание удобного доступа к функциональности приложений. Использование «компактных карточек» и «Dock» для быстрого доступа к по­следним использованным приложениям поддерживает эффективное перемеще­ние между задачами.
Важным аспектом UX на умных часах является также внимание к дизай­ну циферблатов. Пользователям предоставляется возможность выбора тем оформления, а также настройка компонентов циферблата, чтобы максимально соответствовать их предпочтениям и стилю.
Для достижения успешного пользовательского опыта также важно уде­лить внимание адаптации интерфейса к контексту использования. Носимые устройства, такие как умные часы, часто используются в движении или в ситу­ациях, где доступ к традиционным устройствам ограничен. Следовательно, ин­терфейс должен быть спроектирован так, чтобы пользователь мог легко и быст­ро получить необходимую информацию или выполнить действие [24].
Важным аспектом в проектировании UX является тактильный отклик. Умные часы обладают возможностью использовать тактильные сигналы, такие как вибрация, для уведомлений. Проектирование таких сигналов с учетом их четкости и информативности играет важную роль в обеспечении взаимодей­ствия пользователя с устройством.
Работа с контентом также требует специального внимания. Учитывая ограниченный объем отображаемой информации на экране умных часов, необ­ходимо стремиться к предоставлению пользователю ключевой и релевантной информации, избегая перегруженности экрана.
Интеграция с функциональностью здоровья и фитнеса требует четкости и интуитивности. Графический дизайн и представление данных должны быть легко воспринимаемыми, даже в условиях ограниченного пространства [20].
118
Проектирование UX на платформе watchOS также включает в себя созда­ние единообразия между различными приложениями. Это помогает пользова­телям быстро освоиться с новыми приложениями, так как они могут использо­вать знания и навыки, полученные от опыта использования других приложений на умных часах.
Использование компактных форматов отображения данных на умных ча­сах с платформой watchOS важно для эффективного использования ограничен­ного пространства экрана. Давайте рассмотрим пример на Swift, демонстриру­ющий создание компактной карточки с использованием SwiftUI [21].
swift
import SwiftUI
struct CompactCardView: View {
var title: String
var description: String
var body: some View {
VStack(alignment: .leading, spacing: 4) {
Text(title)
.font(.headline)
.foregroundColor(.primary)
Text(description)
.font(.subheadline)
.foregroundColor(.secondary)
}
.padding(8)
.background(Color(.systemBackground))
.cornerRadius(8)
.shadow(radius: 4)
}
}
struct ContentView: View {
var body: some View {
VStack(alignment: .leading, spacing: 16) {
119
CompactCardView(title: «Название события», description: «Краткое описание события.»)
CompactCardView(title: «Другое событие», description: «Дополни- тельная информация.»)
// Добавьте другие компактные карточки или элементы интерфейса по необходимости
}
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
В этом примере CompactCardView представляет собой компактную кар­точку с заголовком и описанием. ContentView затем содержит стек таких кар­точек, представляя собой вертикальный список. Это обеспечивает компактное и информативное отображение данных без перегруженности интерфейса.

5.3. Работа с данными и обеспечение их конфиденциальности

Работа с данными и обеспечение их конфиденциальности – критически важные аспекты в разработке приложений.
Давайте рассмотрим некоторые базовые примеры на Swift, связанные с сохранением данных и обеспечением их конфиденциальности.
### Сохранение данных:
#### UserDefaults:
UserDefaults является простым способом сохранения небольших объемов данных, таких как настройки приложения.
```swift
// Сохранение значения
UserDefaults.standard.set(«JohnDoe», forKey: «username»)
// Получение значения
120
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]