Управление по блютузу через андроид
Такая уже достаточно немолодая технология, как Bluetooth, уже давно перестала играть какую-то важную роль в гонке беспроводных модулей. Но факт остаётся фактом: большинство беспроводных технологий частично или полностью базируются на принципах работы именно этого протокола. Даже самые технологичные устройства и аппараты иногда вынуждены использовать управление телефоном через Bluetooth. Как это сделать и для чего нужно, будет описано дальше.
Android-приложение
Программа для андроида разбита на две части: первая — подключение устройства по Bluetooth, вторая — джойстик управления.
Предупреждаю — дизайн приложения совсем не прорабатывался и делался на тяп-ляп, лишь бы работало. Адаптивности и UX не ждите, но вылезать за пределы экрана не должно.
Дистанционное использование
Если всё правильно настроить и иметь в распоряжении подходящие аппараты и устройства, то можно совершать управление через Bluetooth:
- Мобильным.
- Ноутбуком, нетбуком.
- Планшетом.
- Телевизором.
- Микрокомпьютером-донглом.
- Автомагнитолой.
- Умным домом etc.
Причём комбинировать это можно различными способами. Например, управлять мобильником с другого телефона или планшетом с ноутбука. Главное – чтобы была поддержка нужных протоколов, а настроить можно практически что угодно.
Но с этим стоит быть внимательнее и аккуратнее, так как за прошедшие годы злоумышленники нашли много способов совершить взлом устройства, используя уязвимость Bluetooth-протоколов.
Дальше разберем пару программ, каждая из которых отвечает за свой профиль и позволяет осуществлять управление по Bluetooth телефоном.
В конце концов
Полноценная опись нескольких месяцев работы окончена. Физическая часть разобрана, программная тем более. Принцип остается тот же — обращайтесь по непонятным явлениям, будем разбираться вместе.
А комментарии под первой частью интересны, насоветовали гору полезнейших советов, спасибо каждому.
В прошлой статье я пообещал рассказать, о том как подключать CANNY 3 tiny с помощью UART к bluetooth. И поскольку на этих майских особо не разгуляешься, было принято решение провести время с пользой и таки сдержать обещание. Но просто подключить контроллер к Bluetooth адаптеру HC-06, было бы слишком просто для Хабра.
Если вы любите мониторить «концевики» и герконы, так как это люблю я, милости прошу под кат.
Вот о чем пойдет речь сегодня:
Управление и отправка команд
После того как соединение установлено, можно переходить ко второй активности — ActivityControl. На экране будет только синий кружок — джойстик. Сделан он из обычной Button, разметка приведена выше.
В методе onCreate() происходит все основное действо:
Обратите внимание (!) — мы узнаем, сколько пикселей занимает кнопка. Благодаря этому получаем адаптивность: размер кнопки будет зависеть от разрешения экрана, но весь остальной код легко под это подстроится, потому что мы не фиксируем размеры заранее. Позже научим приложение узнавать, в каком месте было касание, а после переводить это в понятные для ардуинки значения от 0 до 255 (ведь касание может быть в 456 пикселях от центра, а МК с таким числом работать не будет).
Далее приведен код ControlDriveInputListener(), данный класс располагается в классе самой активности, после метода onCreate(). Находясь в файле ActivityControl, класс ControlDriveInputListener становится дочерним, а значит имеет доступ ко всем переменным основного класса.
Не обращайте пока что внимание на функции, вызываемые при нажатии. Сейчас нас интересует сам процесс отлавливания касаний: в какую точку человек поставил палец и какие данные мы об этом получим.
Обратите внимание, использую класс java.util.Timer: он позволяет создать новый поток, который может иметь задержку и повторятся бесконечное число раз через каждое энное число секунд. Его нужно использовать для следующей ситуации: человек поставил палец, сработал метод ACTION_DOWN, информация пошла на ардуинку, а после этого человек решил не сдвигать палец, потому что скорость его устраивает. Второй раз метод ACTION_DOWN не сработает, так как сначала нужно вызвать ACTION_UP (отодрать палец от экрана).
Чтож, мы запускаем цикл класса Timer() и начинаем каждые 10 миллисекунд отправлять те же самые данные. Когда же палец будет сдвинут (сработает ACTION_MOVE) или поднят (ACTION_UP), цикл Timer надо убить, чтобы данные от старого нажатия не начали отправляться снова.
Обратите еще раз внимание: отсчет x и y метод onTouch() ведет от верхнего левого угла View. В нашем случае точка (0; 0) находится у Button тут:
Теперь, когда мы узнали, как получить актуальное расположение пальца на кнопки, разберемся, как преобразовать пиксели (ведь x и y — именно расстояние в пикселях) в рабочие значения. Для этого использую метод calculateAndSendCommand(x, y), который нужно разместить в классе ControlDriveInputListener. Также понадобятся некоторые вспомогательные методы, их пишем в этот же класс после calculateAndSendCommand(x, y).
Когда данные посчитаны и переведены, в игру вступает второй поток. Он отвечает именно за отправку информации. Нельзя обойтись без него, иначе сокет, передающий данные, будет тормозить отлавливание касаний, создастся очередь и все конец всему короче.
Класс ConnectedThread также располагаем в классе ActivityControl.
Итоги скетча
У скетча всего три важных этапа: считывание команды, обработка ограничений поворота и подача тока на двигатели. Все, звучит просто, да и в исполнении легче чем легко, хотя создавалось долго и с затупами. Полная версия скетча.
Что такое Bluetooth. Описание и особенности технологии Bluetooth: Видео
Имею опыт работы в ИТ сфере более 10 лет. Занимаюсь проектированием и настройкой пуско-наладочных работ. Так же имеется большой опыт в построении сетей, системном администрировании и работе с системами СКУД и видеонаблюдения.
Работаю специалистом в компании «Техно-Мастер».
Реализация Bluetooth как сервиса в Android
Подводим итоги Андроид-приложения
Коротко обобщу все громоздкое вышеописанное.
- В ActivityMain настраиваем блютуз, устанавливаем соединение.
- В ActivityControl привязываем кнопку и получаем данные о ней.
- Вешаем на кнопку OnTouchListener, он отлавливает касание, передвижение и подъем пальца.
- Полученные данные (точку с координатами x и y) преобразуем в угол поворота и скорость
- Отправляем данные, разделяя их специальными знаками
Tablet Remote
Этот апплет представляет собою аналогичную вышеупомянутой утилиту, только с несколько уменьшенным функционалом. Ориентирована и заточена она на связку мобильный-мобильный или телефон-планшет. Проще говоря, синхронизация происходит между двумя устройствами, работающими под управлением Android OS.
Целевое назначение апплета заключается в манипуляции гаджетом в ключе воспроизведения музыки и видео, но это не значит, что функционал ограничивается лишь этим. Доступны также и три основные системные кнопки, и даже набор текста на другом аппарате, реализованный посредством экранной клавиатуры ведомого гаджета.
Как и в предыдущем случае, первым делом нужно включить Bluetooth-модули на обоих устройствах, а затем запустить апплеты. Выбрать соответствующий способ соединения и произвести сопряжение.
Параметры представлены не очень богато, но всё что нужно, там имеется. К примеру, они позволяют установить полноэкранный режим. Сюда нужно зайти на управляемом гаджете, чтобы указать его в качестве ведомого. Для этого потребуется зайти в параметры и во вкладке «Setup» поставить галочки напротив обоих имеющихся пунктов. На этом всё – можно начинать пользоваться предоставляемыми функциями.
Переменные
Для начала рассмотрим константы и переменные, которые понадобятся.
Часть I: Введение
-
— в этой статье мы разбирали что из себя представляет контроллер, а также азы работы в среде разработки CannyLab.
- «Как зеницу ока. » или делаем простенькую охранную систему на базе микроконтроллера (CANNY или Arduino) и Raspberry PI — в этой статье мы разбирали работу с UART, а также повторили ранее пройденное.
— в этой статье мы разбирали работу с USB Virtual COM-port, подключение датчиков к АЦП, а также высокочастотный ШИМ на выходах контроллера.
Мы будем собирать систему, которая с помощью мобильного приложения мониторит состояние двух датчиков и при необходимости может в ручном режиме подавать звуковой сигнал.
Все что будет изложено в данной статье, выдумано чисто в учебно-демонстрационных целях. Я просто хотел показать, некоторые приемы работы с контроллером, а также, чтобы купленные в свое время железки хоть как-то отработали свою стоимость.
Несмотря на далекий от реальности характер решаемой задачи мы представим, что делаем систему мониторинга за раздвижной дверью купе. Когда она начнет движение, сработает геркон, а в конце пути даст сигнал концевик. Если нам надо будет привлечь внимание, например, чтобы дверь обратно закрыли, мы подадим «писклявый» сигнал через динамик. Правда динамика у меня нет, но зато есть старые наушники.
Ну и, как всегда, примечание. Настоятельно не рекомендую использовать, материалы данной статьи, как истину в последней инстанции. Многие вещи я сам делал в первый раз, их наверняка можно сделать лучше.
Часть II: Подключение схемы и программа для CANNY 3 tiny
Для начала, чтобы никого в авторских правах не обидеть уточню, что идею подключить контроллер к HC-06, по управлять им через приложение «Serial bluetooth terminal» и некоторые приемы при разработке диаграммы, я позаимствовал с форума, но само собой я их адаптировал под свою задачу.
Схема подключения выглядит следующим образом:
Концевик и геркон подключены к выводам контроллера №6 и №5, наушники к выводу №4 (у него есть ВЧ ШИМ), UART RX – это вывод № 1, UART TX – вывод № 2, вывод № 3 используется для подачи «+5В», вывод «-» — для связи с «землей».
Вот как это выглядит в сборе:
Диаграмму (программу) для СANNY 3 tiny я разрабатывал в CannyLab версии 1.42, возможно в других версиях среды разработки и с другими контроллерами, надо будет внести изменения в диаграмму.
Вот, что получилось:
Разберём подробней два оставшихся.
Вы можете в настройках поиграться с периодом заполнения ВЧ ШИМ, от этого будет зависеть, звук в наушниках.
Я решил, что самое простое решение — это передавать одно число, которое гарантированно дойдет до адресата без потерь.
В нашем случае мы мониторим дискретное состояние геркона и концевика. То есть у нас всего 4 возможные комбинации: геркон и концевик выключены, включен только кто-то один, оба включены.
Поскольку геркон и концевик дают дискретный сигнал (0/1) нужно как-то их различить. Для этого умножим значение сигнала геркона на 2. Теперь получается, что сумма сигналов даст нам значения от 0 до 3.
Теперь разберем не очевидный вариант с прибавлением к этому значению пятидесяти. Дело в том, что CannyLab передает в UART пару символов, то есть вместо 3 допустим 03, но как я говорил есть риск потери части информации. Например, из значения 01, программа на смартфоне может прочитать только первый «0», а это уже будет ошибка.
Загружаем программу в контроллер, нажимаем «запустить», если все работает как задумано, то HC-06 начнет периодически мигать красным светодиодом.
Далее сопрягаем смартфон с адаптером. Теперь можно проверить работоспособность в приложении «Serial Bluetooth terminal» или любом другом с похожим функционалом.
Запишите адрес Bluetooth адаптера, он нам пригодится в следующей главе.
Программу для контроллера и исходный код программы для смартфона можно скачать с GitHub
Хотелось бы отметить, что вам не обязательно реализовывать всё в железе именно на контроллерах CANNY, вы вполне можете написать программу для Arduino или другого любимого вами контроллера. Изначально я и сам планировал написать дополнительно еще и версию скетча для Arduino, но поскольку убил почти все майские праздники, на подключение CANNY и приложение для смартфона у меня уже просто не осталось сил.
Верстка
Стартовая активность держится на верстке, элементы: кнопки и layout для списка устройств. Кнопка запускает процесс нахождения устройств с активным Bluetooth. В ListView отображаются найденные устройства.
Экран управления опирается на верстку, в которой есть только кнопка, которая в будущем станет джойстиком. К кнопки, через атрибут background, прикреплен стиль, делающий ее круглой.
TextView в финальной версии не используется, но изначально он был добавлен для отладки: выводились цифры, отправляемые по блютузу. На начальном этапе советую использовать. Но потом цифры начнут высчитываться в отдельном потоке, из которого сложно получить доступ к TextView.
Файл button_control_circle.xml (стиль), его нужно поместить в папку drawable:
Также нужно создать файл item_device.xml, он нужен для каждого элемента списка:
Основная активность, сопряжение Arduino и Android
Наследуем класс от AppCompatActivity и объявляем переменные:
Метод onCreate() опишу построчно:
Нижеприведенные функции проверяют, получено ли разрешение на использование блютуза (без разрешение пользователя мы не сможем передавать данные) и включен ли блютуз:
Если все проверки пройдены, начинается поиск устройства. Если одно из условий не выполнено, то высветится уведомление, мол, «разрешите\включите?», и это будет повторяться, пока проверка не будет пройдена.
Поиск устройства делится на три части: подготовка списка, добавление в список найденных устройств, установка соединения с выбранным устройством.
Когда Bluetooth-модуль, повешенный на Arduino (подробнее об этом далее), будет найден, он появится в списке. Нажав на него, вы начнете создание socket (возможно, после клика придется подождать 3-5 секунд или нажать еще раз). Вы поймете, что соединение установлено, по светодиодам на Bluetooth-модуле: без соединения они мигают быстро, при наличии соединения заметно частота уменьшается.
Заключение
Мой совет - всегда следовать официальному руководству и рекомендациям по написанию чистого кода.
В первой части я описал физическую часть конструкции и лишь небольшой кусок кода. Теперь рассмотрим программную составляющую — приложение для Android и скетч Arduino.
Вначале приведу подробное описание каждого момента, а в конце оставлю ссылки на проекты целиком + видео результата, которое должно вас разочаровать ободрить.
Метод loop() и дополнительные функции
В постоянно повторяющемся методе loop() происходит считывание данных. Сначала рассмотрим основной алгоритм, а потом функции, задействованные в нем.
Все задержки через команду delay(), которые вы увидите далее, подобраны не через физико-математические вычисления, а опытным путем. Благодаря всем выставленным задрежам, машинка едет плавно, и у всех команд есть время на отработку (токи успевают пробежаться).
В цикле используются две побочные функции, они принимают полученные данные и заставляют машинку ехать и крутится.
Поворачивать, когда андроид отправляет данные о том, что пользователь зажал угол 60, 90, 120, не стоит, иначе не сможете ехать прямо. Да, возможно сразу не стоило отправлять с андроида команду на поворот, если угол слишком мал, но это как-то коряво на мой взгляд.
Скетч Arduino
Андроид-приложение разобрано, написано, понято… а тут уже и попроще будет. Постараюсь поэтапно все рассмотреть, а потом дам ссылку на полный файл.
MyPhoneExplorer
Эта программа позволяет совершить сопряжение, разрешающее доступ к мобильному устройству с персонального компьютера. Естественно, потребуется установить программы на оба устройства и, разумеется, на каждую платформу нужно своё приложение. Компьютерная версия скачивается с официального сайта, а мобильный вариант можно найти в магазине приложений Google – Play Маркет.
Утилита имеет весьма широкий функционал, который может удовлетворить практически любые запросы пользователя начиная от прямой манипуляции телефоном с ПК, отправки СМС, совершения звонков и заканчивая выходом в интернет. Но главным преимуществом является то, что утилита не делает селекционный отбор по производителю устройства, как это принято в Kies или PC Suite, а распознаёт и подключает практически все гаджеты с Android OS. Не можете зайти на сайт joycasino , рабочее зеркало на сегодня по ссылке. Игровые слот автоматы бесплатно и без регистрации . В исключения можно записать лишь исконно китайские аппараты, которые и заказать-то трудно.
Выполняется сопряжение достаточно просто: после установки утилиты на оба аппарата потребуется включить Bluetooth-модуль и запустить приложения.
А далее компьютер при первом запуске предложит избрать один из пяти методов подключения:
- Автоопределение.
- Bluetooth.
- USB-кабель.
- IP-адрес.
- Wi-Fi.
Выбираем Bluetooth-протокол и в графе справа находим нужный порт, если их несколько.
После синхронизации можно начинать пользоваться всеми доступными функциями.
Манифест
На всякий случай приведу полный код манифеста. Нужно получить полный доступ к блютузу через uses-permission и не забыть обозначить вторую активность через тег activity.
Часть III: Пишем приложение на Xamarin для Android
Я знаю, что Xamarin скажем мягко – не самое популярное решение для мобильной разработки. И возможно у вас уже возник вопрос: «Почему я его выбрал?». Ответить на него мне бы хотелось словами из одноименной песни Псоя Короленко:
Ну и еще раз напомню. Я первый раз встречаюсь с Xamarin и это мое первое приложение для Android. Не стоит слепо копировать мой кривой код, если вдруг вы сможете найти более красивое решение, воспользуйтесь им.
При разработке своей программы я опирался на этот материал. Статья не особо разжевана, да еще и на испанском, поэтому я всё-таки счел уместным поделиться с вами своей вариацией на эту тему.
Я собирал программу в Visual studio 2019 community edition.
Первым делом создадим новый пустой проект для Android (Xamarin), как на картинке.
Я вносил изменения только в три файла, целиком их можно просмотреть на GitHub, а тут разберем только важные части:
AndroidManifest.xml
В стандартный шаблон добавлены 2 разрешения:
activity_main.xml
Был убран контейнер по умолчанию (RelativeLayout). Вместо него был добавлен, контейнер LinearLayout просто потому, что он проще. В данном контейнере все элементы выравниваются по вертикали, растягиваясь на всю ширину экрана.
Любому человеку немного знакомому с HTML вёрсткой или XML не составит труда разобраться со структурой пользовательского интерфейса. У нас есть три доступных только для чтения текстовых поля (TextView), один переключатель(Switch), который работает по сути как чекбокс и одна самая обычная кнопка(Button). Элементы можно разместить на форме путем перетаскивания из конструктора, а в окне свойств или в коде задать им более удобные Id, текстовые заглушки и другие параметры.
Осталось описать логику программы.
MainActivity.cs
Ниже под спойлером код целиком для удобства
Теперь по частям.
Блоки с подключением пространств имен, объявлением класса и т.п. я пропущу.
Создаём переменные с которыми позже свяжем элементы пользовательского интерфейса:
Дальше идет, код из примера на который я опирался. Переменные (поля) необходимые для работы тех или иных методов.
Нам здесь важно вбить адрес вашего модуля HC-06 в поле address.
Поскольку это мой первый опыт разработки для смартфонов в том числе работы с Xamarin, я решил ничего не усложнять поэтому адрес устройства, как и в исходном примере, жестко зафиксирован. Если хотите вы можете посмотреть эту статью, там похоже реализован перебор доступных Bluetooth устройств.
Проверяем подключение по Bluetooth:
Включение сирены. По сути просто отправка символов «11» в контроллер:
Проверка состояния переключателя (если смещен в право значит включён):
При включении начинаем соединение с Bluetooth.
Реализация непосредственно подключения:
А вот один из самых важных методов — непосредственно считывание данных:
Многие элементы метода я оставил как в примере, как я понимаю вначале создается соединение с потоком данных, если в буфере с прочитанными данными, что-то есть то оно считывается в переменную valor . При этом как я и обещал, цифру «5» мы просто удалим.
Ну а после уже все просто в зависимости от того какое число нам пришло, выводим тот или иной статус в UI.
Эти два метода я кардинально не менял:
Как ни странно, но все работает:
Метод setup()
В методе setup() мы устанавливаем параметры пинов: будут работать они на вход или выход. Также установим скорость общения компьютера с ардуинкой, блютуза с ардуинкой.
Почему? И как?
Вы когда-нибудь задавали себе вопрос, прочитав официальное руководство по bluetooth для Android, как управлять им внутри вашего приложения? Как сохранить соединение активным, даже когда вы переходите от одного действия к другому?
Что ж, в этом руководстве я постараюсь показать вам, как я реализовал связь bluetooth через Service, чтобы управлять bluetooth и соединением с различными действиями, используя Service Binding, а также установил слушатель обратного вызова для операций, получающих информацию о состоянии связи bluetooth.
В этом руководстве мы создадим четыре файла:
BluetoothSDKListenerHelper : который выполняет BroadcastReceiver и запускает функции IBluetoothSDKListener
IBluetoothSDKListener : наш Interface, который определяет функции обратного вызова
BluetoothUtils : который содержит имена действий, определенных для фильтрации событий в BroadcastReceiver
1) Определите действия
Первым шагом является определение файла BluetoothUtils.kt , который содержит действия, о которых мы хотим получать уведомления в нашей активности:
Я определил несколько, но вы можете добавлять их по своему усмотрению.
2) Определите события-функции обратного вызова
Второй шаг - это определение нашего интерфейса, который будет содержать события, соответствующие действиям, которые мы определили в первом шаге. Итак, давайте продолжим и определим IBluetoothSDKListener как:
3) Определение BroadcastReceiver
Следующим шагом будет определение нашего BroadcastReceiver , задачей которого будет фильтрация намерений с нашими действиями, определенными до получения LocalBroadcastManager , для запуска функций обратного вызова, определенных в предыдущем разделе. Поэтому мы используем BluetoothSDKListenerHelper как:
В действии или фрагменте мы реализуем наш IBluetoothSDKListener , который мы зарегистрируем через две функции registerBluetoothSDKListner() и unregisterBluetoothSDKListner() . Например:
Теперь наш фрагмент может быть запущен для событий, полученных BroadcastListener , который передает их через обратные вызовы в интерфейс нашего фрагмента. Чего теперь не хватает? Ну, важная часть: сервис Bluetooth!
4) Определите сервис Bluetooth
А теперь самая сложная часть - Bluetooth Service. Мы собираемся определить класс, расширяющий Service , в котором мы определим функции, позволяющие привязывать Service и управлять потоками Bluetooth-соединения:
Чтобы сделать суть более читабельной, я закомментировал части о потоках, которые вы можете получить из официальной документации.
Часть IV: Заключение
Вот как работа программы выглядит в натуре:
Вот таким был мой первый опыт разработки приложений для смартфона на Android.
Хотелось бы отметить, что VS 2019 и Xamarin на моем стареньком компьютере работают очень медленно.
Я так понимаю, контроллеры CANNY можно использовать при тюнинге автомобилей, особенно отечественных так, что вполне можно сделать какую-нибудь «фичу» и написать к ней приложение для смартфона. Главное помнить, что при питании от бортовой сети автомобиля на выходах контроллера будет тоже напряжение что и на входе (например, 12 В вместо 5 В). Не забудьте защитить Bluetooth адаптер, чтобы он ненароком не вышел из строя.
Статья оказалась для меня очень трудоёмкой, надеюсь, что все было не зря и она вам понравиться.
Tablet Remote
версия: 1.6
Последнее обновление программы в шапке: 25.04.2013
Краткое описание:
Для беспроводного управления одним Android-аппаратом с другого аппарата под управлением той же операционной системы Android по каналу Bluetooth, Wi-Fi.
Описание:
Для чего может понадобиться утилита Tablet Remote в реальной жизни? Предположим такой сценарий – у вас есть современный Android-планшет, подключенный к телевизионной HD-панели через порт HDMI для просмотра фильмов. Если вы не хотите протягивать 10-метровый кабель от дивана до телевизора и не хотите вставать каждый раз, когда нужно выполнить какие-либо действия на планшете, стоит задуматься о дистанционном управлении планшетом с другого Android-устройства. Именно в такой ситуации и пригодится утилита Tablet Remote, которую, само собой, нужно установить на оба (или более) ваших Android-аппаратов.
Одно из главных преимуществ утилиты Tablet Remote заключается в том, что для ее работы не нужен Интернет, кабельные соединения и прочее – только Bluetooth-модуль, присутствующий в большинстве подобных устройств. Для успешного соединения управляемых и управляющих устройств нужно их предварительно «спарить» (стандартная процедура для Bluetooth-соединений). Для спаривания нужно запустить утилиту Tablet Remote на том и другом устройстве и выбрать соответствующие аппараты в списке обнаруженных беспроводных устройств.
Когда вы завершите «спаривание» устройств, их беспроводное соединение по умолчанию активируется всего на 2 минуты (120 секунд), что можно быстро изменить в настройках Tablet Remote. Интервал открытости для поиска можно установить неограниченным. Последняя операция перед началом продуктивного использования решения – это запуск процедуры настройки на управляющем устройстве. При настройке дистанционного управления настоятельно рекомендуется включить опции Enable Tablet Remote In The Settings («Активировать Tablet Remote в параметрах») и Change The Input method For Tablet Remote («Изменить метод ввода для Tablet Remote»).
Наконец, мы получили пару из управляющего и управляемого аппаратов. Чтобы превратить управляющий аппарат (пусть это будет более легкий и компактный смартфон) в дорогой, но незаменимый пульт дистанционного управления, нужно просто нажать кнопку «Remote» в приложении Tablet Remote. После этого на экране «контроллера» появится множество кнопок для управления вторым аппаратом (пусть это будет более громоздкий и мощный планшет, соединенный с ТВ-панелью). В частности, пользователю доступны кнопки управления воспроизведением (старт/стоп, вперед, назад и др.), настройка громкости и яркости, переключение между рабочими экранами. Кроме того, для прямого управления удаленным устройством доступны кнопки Back (Вернуться), Home (На главный экран), Menu (Меню), Search (Поиск) и текстовый ввод с экранной клавиатуры. Переключиться в полноэкранный режим можно, выключив строку состояния в настройках утилиты.
Утилита Tablet Remote успешно испытана на связке – HTC Desire HD и Samsung Galaxy Tab 10.1N
Читайте также: