Управляем компьютером с Android устройства
Начало
А началось все с того, что вызывает меня генеральный к себе, и говорит: «Вот видишь телефон? Хочу чтобы там была кнопка, я на нее нажимаю, и у меня в ноутбуке кино включается. Нажимаю другую – музыка играет.» И еще чего-то много наговорил, уж не помню. «Задача понятна? Выполняй!» Вот уж не знаю, с чего такая потребность у него возникла. То ли звезды не под тем углом встали, то ли сон какой приснился. Короче, не поймешь этих богатых… Ну да ладно.
Поначалу полез рыться в Гугл в поисках подходящей программы, а потом подумал – а какого черта? Напишу сам. Тем более, что задача не показалась сложной, да и “зов кода” уже давал о себе знать (этакая профессиональная it-ломка). Вот и решил соединить Windows и Android собственными силами.
То, что он просил, я сделал за пару дней. Но здесь я не хочу городить много кода, проверок и обработок исключений и т.п. Статья скорее предназначена для самых маленьких, как основа, опираясь на которую, можно построить что-то более масштабное. Ни в коем случае не претендую на оригинальность, явно кто-то что-то подобное писал, я просто предлагаю свой вариант. В общем, всем, кому интересно, посвящается.
Что мы имеем
Значит так. С одной стороны, у нас телефон с Android на борту, с другой — Windows с установленными программами, притом некоторые из этих программ нам надо запускать, подав команду с телефона.
Телефон и компьютер свяжем через локальную сеть, тут без вариантов (ну не смски же посылать). Таким образом, будем писать две программы. Первая — это сервер, работающий на компьютере, задача этой программы — открыть и слушать порт. Если на этот порт падает что-то полезное, то выполнить заданное нами действие. Вторая программа — это клиент, запущенный на телефоне, ее задача обработать действия пользователя, подключиться к серверу и передать информацию.
Немного о сокетах
Тема программирование сокетов до того уже заезженная, что и особо говорить нечего. Но все же в двух словах, для тех, кто не любит ходить по ссылкам.
Сокет — это программный интерфейс, который позволяет устанавливать связь между двумя процессами, используя протокол tcp/ip. Сокет ассоциирован с двумя аспектами: ip-адресом и портом. Где ip-адрес — это адрес хоста (компьютера) в сети, с ним работает протокол IP. Port — это идентификатор приложения, к которому адресовано соединение, тут работает протокол TCP. Порт может быть как TCP, так и UDP, в этой статье я буду использовать только TCP. Поскольку ip-адрес является уникальным как в сети интернет, так и в локальной сети, то он однозначно определяет адрес отправителя и адрес принимающего. Порт же является уникальным в пределах операционной системы, он определяет приложение, с которым мы хотим взаимодействовать. Порты могут быть стандартными, например, 80 закреплен за HTTP, или 3389 — RDP. Вы можете использовать любой незанятый порт, но стандартные лучше не трогать. Очень хорошо и с примерами о сокетах написано здесь.
Сервер. Начинаем хулиганить
Запускать Aimp, Windows Media Player и т.п. даже с телефона — это не интересно, да и на базе этой статьи вы сможете все это легко реализовать, немного переделав код. Давайте лучше побезобразничаем. Будим крутить-вертеть экран монитора как нам вздумается или выводит неожиданные сообщения (этакий однонаправленный ацкий мессенджер), и самое ужасное — выключим компьютер! Правда, за это могут и на вилы надеть. Ну да ладно, пускай сначала поймают.
Итак, приступим. В Visual Studio создаем новое Windows Form приложением с именем, скажем, FunnyJoke. Открываем файл Program.cs и удаляем весь код в теле функции Main. Этот код инициализирует главную форму приложения, нашему серверу никакие окна не нужны, он должен сидеть тихо мирно и ждать команд.
В классе Program определим следующие переменные:
Я взял порт 10000, именно его и будет слушать наш сервер, вместо ip адреса задал 0.0.0.0 это говорит о том, что будут обрабатываться все доступные сетевые интерфейсы. Это не совсем правильно, но для начала сойдет. Далее я определил три константы, которые задают коды команд, приходящие от клиента. В начале проекта не забываем подключить:
Теперь, вместо удаленного кода в функции Main вставляем следующий:
Пример хорошо комментирован. Но все же поясню. Сначала создаем локальную конечную точку и ассоциируем ее с нашим ip адресом и портом. Затем, определяем основной сокет, связываем его с конечной точкой, и переводим в режим прослушивания. После этого входим в бесконечный цикл, и начиная со строки:
наш сервер переходит в состояние ожидания соединения. При удачном соединении создастся новый экземпляр Socket, посредствам которого мы и будем общаться с нашим клиентом. После того как соединение установлено начинаем читать данные:
Команды клиента закодированы однобайтовым кодом (описаны в начале программы), сервер расшифровав код команды начинает ее выполнять, после этого снова переходит в режим ожидания. Исключением является codeMsg, т.к. после нее ожидается набор байт, содержащий строку сообщения. Поэтому, получив эту команду сервер снова читает данные с сокета:
Строка, приходящая от клиента, имеет кодировку символов UTF-8, поэтому прежде чем показать ее несчастному пользователю, необходимо привести ее к стандартному виду.
Что бы упростить программу, и не создавать лишние диалоги я использовал стандартный класс MessageBox, но у таков подхода есть один недостаток. MessageBox создает модальное окно, которое блокирует поток всего приложения. Другими словами, пока открыто окно с сообщением наш сервер ничего не делает. Минус конечно, но за простоту надо платить.
Процедуру, изменения ориентации экрана, расписывать не буду, ее код я выполнил так как рекомендует Microsoft вот тут. Как повернуть экран средствами .NET я не нашел. Это легко осуществимо для мобильных платформ, а вот для обычного PC оказалась неразрешимая проблема. Но, на помощь пришел старый добрый WINAPI и все разрулил.
Выключаем компьютер штатными средствами Windows, путем вызова команды shutdown с соответствующими флагами.
С сервером, пожалуй, все. Исходный код проекта я прикреплю в конце статьи.
Клиент
Клиент будем писать в Android Studio, поскольку мне эта IDE больше нравится чем Eclipse. Любителям последнего думаю не составит больших трудностей переделать проект. Для отладки я использовал VirtualBox с установленной виртуальной машиной Android, ибо родной эмулятор жутко тормозной, и жизни не хватить что бы с его помощью что-то отладить. Ну и периодически проверял на «живом» телефоне. Итак, создаем проект с именем FunnyJoke, задаем минимальную версию API, которую способен утянуть ваш телефон (у меня 16) и выбираем Empty Activity. Все остальное по умолчанию. Делаем разметку представления. С дизайном я шибко не извращался, кому надо пускай рисует красивые кнопки, размещает их по фен Шую и т.п. Я сделал просто: два поля типа EditText, первое для ввода ip адреса контролируемого компьютера, второе для текста сообщения, и кнопка, которая заставит поворачиваться рабочий стол. А вот кнопку завершения работы я сделал большую и угрожающее красную. Это чтоб случайно не нажать.
Тут стоит обратить внимание на поле edIPaddress, в нем стоит фильтрация на ввод только цифр и. (точка), так-как поле предназначено для ввода ip адреса. Надо сказать, что это единственная проверка на правильность введенных данных, все остальное остается на совести пользователя. Еще хочу cказать о кнопке btnPowerOff ее состояние отслеживает селектор, и в зависимости от того нажата она или нет меняет изображение (иначе, не понятно произошло ли нажатие, кнопка будет выглядеть как статичная картинка). Вот код селектора button_img.xml:
Соответственно в ресурсах должны быть две картинки одна для нажатого состояния, другая для обычного. Получится вот такой экран:
На этом с разметкой закончим. Переходим к файлу MainActivity.java. В первую очередь, так же, как и в сервере, определяем коды команд и некоторые переменные:
Далее переходим к обработчику нажатия кнопок. Обратите внимание, что обработчик один, и какая копка была нажата определяем по идентификатору. В первую очередь получаем строку с поля edIPaddress, если поле не заполнено, то выводим сообщение о необходимости ввода ip адреса, и больше ничего не делаем.
В Android не рекомендуется создавать долгоиграющие процессы в основном потоке, это связанно с тем, что возможно “подвисание” программы, и пользователь или система может просто закрыть приложение, не дождавшись ответа. К таким долгоиграющим процессам относится и работа с сетью. В этом случае необходимо создать дополнительный поток, в котором и выполнять “долгий” код. В java есть стандартный класс Thread, который позволяет управлять потоками но, его мы использовать не будем, т.к. в Android существует специально предназначенный для этого класс AsyncTask. Подробно можно почитать здесь или здесь.
Создаем класс, который будет заниматься отправкой сообщения, его родителем делаем AsyncTask, и переопределяем метод doInBackground в теле которого и будет находится основной код:
Сначала создаем экземпляр класса InetAddress, который будет содержать в себе ip сервера. Потом создаем сокет, связываем его с удаленным адресом и портом, и запрашиваем стандартный поток ввода/вывода (вернее только вывода, потому что наш клиент ничего не получает). И наконец, в зависимости от значения переменной codeCommand, посылаем сообщение серверу.
Теперь вернемся к нашему обработчику нажатия кнопок, создадим экземпляр класса SenderThread, затем в зависимости от того какая кнопка была нажата инициализируем переменную codeCommand, по ней наш поток будет определять что мы от него хотим. И наконец, активируем, вызвав метод execute().
Немного поправим манифест приложения, дадим разрешение на использование сети и wi-fi, без этого ничего работать не будет:
Все! Можно собирать и проверять. Вот результат:
Источник
7 программ для управления Android-телефоном с помощью компьютера
Существует несколько причин для управления телефоном на ОС Android с компьютера. Это может быть использование приложений, игры, общение в мессенджере и т.д. Например, можно играть в игры с помощью клавиатуры и мышки. Запустить приложение со смартфона на большом экране – это действительно интересно. А также это отличная возможность для пользователей, которым нужно показать презентацию на большом экране.
Принцип установки напрямую зависит от конкретной модели устройства. Некоторые из них, такие как Samsung Sidesync, довольно просты в установке. Другие же более сложные. Большинство приложений в этом списке позволяют осуществлять удаленный контроль и с Windows, и с Mac. Некоторые программы, такие как Vysor, используются для зеркалирования Android в браузере Google Chrome. Каждое приложение подходит под конкретные задачи пользователей. Например, MirrorGo подойдет для геймеров, а SideSync для владельцев телефонов Samsung.
Vysor для Google Chrome
Инструмент работает через браузер Google Chrome, поэтому может использоваться на разных операционных системах: Windows, Mac, Ubuntu и т.д. Есть также настольное приложение для тех пользователей, которые не желают ограничивать себя рамками браузера Chrome.
Есть несколько разных способов использования Vysor. Первый вариант – это мобильное приложение и клиент для рабочего стола. Второй – удаленное управление через Chrome. После запуска браузера нужно будет подключить смартфон или планшет к компьютеру через USB-кабель, чтобы одновременно с потоковой передачей данных шла зарядка аккумулятора. Только перед этим нужно включить отладку устройства через USB в настройках, скачать ADB для Windows (требуется не всегда), а затем установить расширение Vysor в Chrome.
После запуска программы нужно просто нажать ОК, чтобы разрешить соединение с телефоном. Далее нужно просто выбрать устройство из списка, которое моментально отобразится на экране компьютера. С помощью Vysor можно даже виртуально поделиться управлением Android с другими пользователями. Это может пригодиться при устранении неполадок.
APowerMirror
Мощная программа, которая дает пользователю полный контроль над всеми функциями смартфона с компьютера. После того как экран телефона отобразится на мониторе, можно брать на себя управления с помощью клавиатуры и мыши. APowerMirror умеет делать скриншоты, записывать видео с экрана и выполнять многие другие задачи. Для использования программы не требуется root-права — она хорошо работает на всех смартфонах Android.
Установка занимает всего несколько минут. Нужно просто скачать приложение на Android и установить клиент на компьютер, запустить его и следовать инструкциям на экране. Соединение со смартфоном или планшетом возможно через USB или сеть Wi-Fi. Чтобы приступить к удаленному управлению, нужно запустить APowerMirror на мобильном устройстве и выбрать Start Now.
VMLite VNC Server
С помощью VNC Server можно подключиться к смартфону из любой точки мира, но стоит отметить, что приложение имеет множество сложных настроек и оно платное. Но зато программа получилась действительно мощной. Свои функции она выполняет на пять с плюсом.
Как и в случае с Vysor, сначала нужно включить отладку устройства через USB. Далее придется настроить несколько параметров и заплатить 690 рублей за приложение в магазине Google Play. Затем подсоединить телефон к компьютеру через USB-кабель, запустить программу на компьютере, которая автоматически скачает необходимые драйверы для Windows.
MirrorGo
Приложение MirrorGo должно заинтересовать геймеров. С помощью MirrorGo можно зеркалировать мобильное устройство на ПК и записывать всё происходящее на экране смартфона. После этого видео с игры без проблем загружается на YouTube или Twitch. Но если вы не планируете часто пользоваться MirrorGo, для начала стоит протестировать другие варианты. Дело в том, что после истечения срока действия бесплатной пробной версии придется платить 6 долларов в месяц или 17 долларов за годовую подписку.
Что делает MirrorGo отличным вариантом для геймеров? Во-первых, это поддержка полноэкранного режима в HD-качестве. Также поддерживаются мышь и клавиатура, есть захват и запись экрана, синхронизация сохранений и других игровых данных, а также горячие клавиши. В целом управление с помощью клавиатуры и мышки соответствует сенсорному. Это идеальный вариант для игры в PUBG Mobile или Fortnite на компьютере.
Чтобы все заработало, нужно скачать MirrorGo для Android, установить программу на компьютер, запустить их обе и следовать инструкции на экране.
AirDroid
AirDroid — один из самых популярных эмуляторов Android для ПК, но это ещё не все, что он может предложить. Если вы не хотите запускать эмулятор, используйте AirDroid для потоковой передачи экрана смартфона на компьютер. Как и для большинства других программ из этого списка, подключение осуществляется через USB или Wi-Fi. Разработчики также создали расширение для Chrome, похожее на Vysor.
Чтобы начать работу, нужно просто запустить функцию AirMirror в AirDroid. После этого на экране появится простая инструкция для подключения. После завершения настроек вы сможете управлять телефоном с любого компьютера через браузер. Для это нужно будет просто ввести в адресную строку браузера специальный IP-адрес, после чего откроется доступ ко всем настройкам смартфона: сообщения, файловое хранилище, уровень зарядки аккумулятора и многое другое.
AirDroid Remote Support предлагает функцию удаленного управления. Вы можете оказывать помощь своим близким с полным контролем над устройством. Для этого на телефон, которому требуется помощь нужно установить надстройку AirDroid Control и предоставить соответствующие системные разрешения.
Samsung SideSync
Миллионы людей пользуются смартфонами и планшетами Samsung Galaxy. Специально для них компания создала набор инструментов, существенно расширяющих функционал устройств. Хотя SideSync в основном предназначен для передачи данных и проверки обновлений, он также имеет опцию дублирования экрана. Приложение уже предварительно установлено на смартфоны Galaxy S8 и Galaxy S9.
Если у вас более старая модель смартфона, то скачайте Samsung SideSync на свой компьютер и установите его APK на смартфон. Затем запустите оба приложения и следуйте инструкциям на экране. Sidesync очень удобен для пользователя, поэтому у вас не должно возникнуть проблем с настройками. После запуска программы на компьютере и смартфоне перейдите в «Настройки» и найдите «режим презентации». Он необходим для зеркального отображения экрана смартфона на компьютере.
TeamViewer QuickSupport
Геймеры любят TeamViewer за минимальное количество настроек и быструю потоковую передачу данных на компьютер. Устанавливать приложение не нужно, запуск осуществляется с портативной версии.
Одна из главных особенностей программы – возможность предоставления удаленного доступа к смартфону для других пользователей TeamViewer. Но можно и контролировать все самостоятельно. Скачайте TeamViewer на компьютер и установите приложение QuickSupport для Android. После этого соедините смартфон с компьютером, чтобы воспользоваться функцией удаленного управления.
Источник