Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Создание программного обеспечения для нательных компьютерных сетей и носимых систем. Учебное пособие.pdf
X
- •ЧАСТНОЕ УЧРЕЖДЕНИЕ
- •Медицинский университет «РЕАВИЗ»
- •ВВЕДЕНИЕ
- •1.2. Исторический обзор развития носимых систем
- •ГЛАВА 2. ТЕХНОЛОГИЧЕСКИЕ АСПЕКТЫ РАЗРАБОТКИ
- •2.1. Выбор технологического стека для носимых систем
- •2.2. Архитектурные решения при разработке программного обеспечения
- •2.3. Управление энергопотреблением и оптимизация производительности
- •2.5. Интеграция с облачными сервисами в носимых приложениях
- •2.4. Работа с датчиками и взаимодействие с окружающей средой
- •2.6. Аспекты безопасности в технологическом контексте
- •3.1. Языки программирования и их роль в разработке для носимых систем
- •3.2. Принципы объектно-ориентированного программирования в контексте носимых технологий
- •3.3. Обзор паттернов проектирования для эффективной разработки приложений
- •3.4. Многозадачность и управление потоками в носимых приложениях
- •3.5. Оптимизация алгоритмов под ограниченные ресурсы носимых устройств
- •3.6. Работа с сенсорами и вводом данных в носимых приложениях
- •3.7. Адаптация пользовательского интерфейса к маленьким экранам и управлению сенсорами
- •4.1. Особенности дизайна интерфейса для различных типов носимых устройств (часы, очки, фитнес-трекеры)
- •4.2. Адаптация пользовательского опыта к ограниченным размерам экрана
- •4.3. Взаимодействие с пользователем через жесты и голосовые команды
- •4.4. Работа с уведомлениями и многозадачность в носимых приложениях
- •4.5. Применение принципов доступности в дизайне интерфейса
- •ГЛАВА 5. РАЗРАБОТКА КЛИЕНТ-СЕРВИСНОЙ ОРГАНИЗАЦИИ НАТЕЛЬНОЙ КОМПЬЮТЕРНОЙ СЕТИ (НА ПРИМЕРЕ watchOS)
- •5.3. Работа с данными и обеспечение их конфиденциальности
- •5.4. Разработка клиентских приложений
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- •ПРИЛОЖЕНИЕ А
- •ПРИЛОЖЕНИЕ Б
- •ПРИЛОЖЕНИЕ В

an) {
- Обработка результата голосовой команды:
```kotlin
val resultListener = object : VoiceInteractor.RequestResultListener {
override fun onComplete(result: VoiceInteractor.Request, success: Boole-
if (success) {
// Обработка успешного выполнения команды
} else {
// Обработка неудачного выполнения команды
}
}
}
```
Интеграция голосового и жестового управления обогащает пользовательский опыт, делая взаимодействие с носимыми устройствами более естественным и удобным. При этом важно учитывать контекст использования и предоставлять пользователю понятные подсказки для успешного выполнения команд.
Взаимодействие с пользователем через жесты и голосовые команды является важным аспектом разработки интерфейса для носимых устройств. Ниже
представлены рекомендации и примеры кода для интеграции жестов и голосового управления:
Использование библиотеки голосового распознавания:
// Создание интента для распознавания речи
val speechIntent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
// Запуск активности распознавания речи
startActivityForResult(speechIntent, SPEECH_REQUEST_CODE)
```
101

- Обработка результатов распознавания:
```kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultC ode, data)
if (requestCode == SPEECH_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
val matches = data?.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
val spokenText = matches ?. g et ( 0)
// Обработка распознанной речи
}
}
```
2. Жесты (Java/Android):
- Использование библиотеки жестов:
```java
// Импорт библиотеки жестов
import android.view.GestureDetector;
import android.view.MotionEvent;
// Инициализация детектора жестов
GestureDetector gestureDetector = new GestureDetector(context, new
MyGestureListener());
// Обработка событий прикосновения
@Override
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
```
102

- Создание класса для обработки жестов:
```java
import android.view.GestureDetector. Si mpleOnGestureListener;
import android.widget.Toast;
public class MyGestureListener extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// Обработка жеста «мах»
if (velocityX > 0) {
Toast.makeText(context, «Жест вправо»,
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, «Жест влево»,
Toast.LENGTH_SHORT).show();
}
return true;
}
}
```
3. Объединение голоса и жестов:
- Запуск распознавания голоса через жест:
```java
// При определенном жесте, например, долгом нажатии
gestureDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
103

// Запуск распознавания речи
startActivityForResult(speechIntent, SPEECH_REQUEST_CODE);
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return false;
}
});
```
4. Работа с голосовыми командами в Wear OS:
- Использование VoiceInteractor:
```kotlin
val voiceInteractor = getSystemService(Context.VOICE_INTERACTION_SE RVICE) as VoiceInteractor
val prompt = VoiceInteractor.Prompt(«Скажите команду»)
// Запуск голосовой команды
voiceInteractor.startVoiceActivity(intent, prompt, resultListener)
```
- Обработка результата голосовой команды:
```kotlin
val resultListener = object : VoiceInteractor.RequestResultListener {
override fun onComplete(result: VoiceInteractor.Request, success: Boolean) {
if (success) {
// Обработка успешного выполнения команды
} else {
// Обработка неудачного выполнения команды
}
}
}
```
104

Интеграция голосового и жестового управления обогащает пользовательский опыт, делая взаимодействие с носимыми устройствами более естественным и удобным. При этом важно учитывать контекст использования и предоставлять пользователю понятные подсказки для успешного выполнения команд.
Рис. 4.2. Реализованный голосовой интерфейс в Wear OS
4.4. Работа с уведомлениями и многозадачность в носимых приложениях
Работа с уведомлениями и обеспечение эффективной многозадачности
являются ключевыми аспектами для создания удобных и функциональных носимых приложений. Ниже представлены стратегии и примеры кода для обработки уведомлений и обеспечения многозадачности в приложениях для носимых устройств [48].
1. Уведомления (Kotlin/Android):
- Создание уведомления:
```kotlin
// Создание канала уведомлений (для Android 8 и выше)
val channelId = «my_channel»
val channelName = «My Channel»
val importance = NotificationManager.IMPORTANCE_DEFAULT
val channel = NotificationChannel(channelId, channelName, importance)
notificationManager.createNotificationChannel(channel)
// Создание уведомления
val notificationBuilder = NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.notification_icon)
105

.setContentTitle(«Заголовок уведомления»)
.setContentText(«Текст уведомления»)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
// Отправка уведомления
notificationManager.notify(notific ationId, notificationBuilder.build( ))
```
- Обработка нажатия на уведомление:
```kotlin
// Создание интента для обработки нажатия на уведомление
val resultIntent = Intent(this, ResultActivity::class.java)
val resultPendingIntent = PendingIntent.getActivity(
this,
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT
)
// Установка интента в уведомление
notificationBuilder.setContentIntent(resultPendingIntent)
```
2. Многозадачность (Java/Android):
- Запуск фоновых задач:
```java
// Использование AsyncTask для выполнения фоновой задачи
private class MyTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
// Фоновая задача
return «Результат выполнения задачи»;
}
@Override
106

protected void onPostExecute(String result) {
// Обработка результата в основном потоке
textView.setText(result);
}
}
// Запуск задачи
new MyTask().execute();
```
- Использование служб для фоновых операций:
```java
// Создание службы
public class MyService extends Service {
@Override
public int onStartCommand(Intent intent, int fl ags, int startId) {
// Фоновая операция
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
// Запуск службы
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
```
3. Работа с уведомлениями в Wear OS:
- Дополнительные возможности для уведомлений:
```kotlin
// Добавление действия в уведомление (например, кнопка)
107

val actionIntent = Intent(this, ActionActivity::class.java)
val actionPendingIntent = PendingIntent.getActivity(
this,
0,
actionIntent,
PendingIntent.FLAG_UPDATE_CURRENT
)
val action = NotificationCompat.Action.Builder(
R.drawable.ic_action,
«Действие»,
actionPendingIntent
).build()
// Добавление действия в уведомление
notificationBuilder.addAction(action)
```
- Группировка уведомлений:
```kotlin
// Создание группы уведомлений
val groupKey = «my_group»
notificationBuilder.setGroup(groupKey)
// Добавление уведомлений в группу
val summaryNotification = NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.notification_icon)
.setGroup(groupKey)
.setGroupSummary(true)
.build()
// Отправка группы и общего уведомления
notificationManager.notify(1, notific at ionB uilde r.bui ld( ))
notificationManager.notify(2, summaryN otifi ca ti on)
```
108

Работа с уведомлениями и обеспечение многозадачности в носимых приложениях требует внимания к деталям и учета специфики использования
устройств. Грамотное управление уведомлениями и фоновыми задачами обеспечивает плавный и эффективный пользовательский опыт на носимых устройствах.
4.5. Применение принципов доступности в дизайне интерфейса
Применение принципов доступности в дизайне интерфейса носимых
устройств играет важную роль, так как оно направлено на создание удобного и
доступного опыта для всех пользователей, включая людей с ограниченными
возможностями. Вот несколько принципов и практических рекомендаций по
учету доступности при проектировании интерфейсов для носимых устройств:
1. Размер элементов и дистанция между ними:
- Большие и четкие элементы: Используйте крупные кнопки, иконки и
тексты, чтобы облегчить их восприятие и касание.
2. Цвет и контрастность:
- Контрастные цвета: Обеспечьте достаточный контраст между текстом
и фоном для улучшения читаемости.
- Использование различных цветов: Избегайте зависимости от цвета как
основного средства передачи информации.
3. Голосовое управление и текстовые подсказки:
- Поддержка голосового управления: Интегрируйте голосовые команды
для выполнения основных функций.
- Текстовые подсказки: Предоставляйте текстовые подсказки для важ-
ных элементов интерфейса.
4. Адаптивный дизайн:
- Поддержка различных устройств: Учтите разнообразие форм факторов
и разрешений устройств, чтобы обеспечить единый и удобный пользовательский опыт.
5. Навигация и фокус:
- Ясная навигация: Обеспечьте легкую и интуитивную навигацию, осо-
бенно при использовании сенсорных жестов.
- Визуальное выделение фокуса: Подсвечивайте активный элемент, что-
бы пользователь мог легко определить свое текущее местоположение в интерфейсе.
109

6. Регулировка яркости и шрифтов:
- Возможность настройки яркости: Предоставьте опцию регулировки
яркости экрана, особенно в условиях яркого света.
- Выбор размера шрифта: Позвольте пользователям настраивать размер
шрифта для лучшей читаемости.
7. Тестирование с реальными пользователями:
- Тестирование доступности: Вовлекайте пользователей с различными
потребностями в процесс тестирования для выявления проблем и получения
обратной связи.
Примеры кода (Kotlin/Android) с учетом доступности:
```kotlin
// Пример использования контрастных цветов
textView.setTextColor(ContextCompat.getColor(context, android.R.color.white))
textView.setBackgroundColor(ContextCompat.getColor(context, android.R.color.black))
```kotlin
// Пример поддержки голосового управления
val speechRecognizer = SpeechRecognizer.createSpeechRecognizer(context)
val speechIntent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
val recognitionListener = object : RecognitionListen er {
override fun onResults(results: Bundle?) {
val matches = results?.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
val spokenText = matches?.get(0)
// Обработка распознанной речи
}
// Другие методы интерфейса RecognitionListener
}
110
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
