Xamarin как запустить приложение на телефоне
Я хочу подключить устройство Android к Windows 8.1 через USB вместо использования встроенного эмулятора.
Как я могу это сделать?
Примечание: устройство можно подключить через USB (установлены драйверы USB),
и это в режиме разработчика.
2 ответа
- Сначала вам нужно включить режим разработчика:
Android 4.2 и выше
Начиная с Android 4.2 и выше, параметры разработчика по умолчанию скрыты. Чтобы сделать его доступным, перейдите в «Настройки»> «О телефоне» и семь раз коснитесь элемента «Номер сборки», чтобы открыть вкладку «Параметры разработчика»:
- Затем вам потребуются драйверы USB для вашего телефона, если они еще не установлены, посетите сайт поддержки Sony.
После того, как ваше устройство подключено к вашей машине через USB-кабель, отладка будет похожа на отладку с помощью эмулятора.
Начните отладку приложения, нажав Cmd-Enter в Xamarin Studio в OS X или F5 в Visual Studio. При этом вам может быть предложено выбрать устройство для отладки.
Убедитесь, что ваше устройство отображается на adb Android:
1) Найдите, где Visual Studio / Xamarin (или вы) установили Android SDK:
(Нажмите "Инструменты" на панели инструментов вверху, затем нажмите "Параметры")
2) Скопируйте путь для Android SDK Location
3) Вставьте это в вашу оболочку (cmd или powershell), выполнив cd (нам нужно перейти в этот каталог.
4) CD в подкаталог platform-tools
5) Запустите adb devices
Это должно отобразить что-то вроде:
Если все это возвращается:
Тогда устройство не будет распознано и не будет доступно для развертывания Xamarin (или любого из инструментов Google Android).
Примечание. Также убедитесь, что ваш телефон находится в режиме Mass Storage , поскольку по умолчанию используется режим MTP, и он не будет работать в качестве устройства adb.
Примечание. Если он НЕ отображается в списке, убедитесь, что драйверы установлены правильно и вы включили «Отладку по USB» на телефоне.
Вам нужно включить USB debugging в Developer Options в телефоне, подключить телефон, и Visual Studio должна обнаружить его.
Вам также может потребоваться загрузить и установить драйверы USB со страницы драйверов Sony.
Я нашел несколько ссылок, но они не объясняют, как это делается. Я могу отлаживать с помощью Xamarin Studio IDE, но эта IDE (без обид) хромает по сравнению с Visual Studio 2012.
Используя Visual Studio 2012, кажется, есть только возможность выбрать эмулятор для отладки. Итак, как мне заставить его отлаживать на моем реальном устройстве через USB (у меня уже есть USB Debugging = true)?
Я использую Visual Studio 2017 с OnePlus.
Чтобы отладка заработала, я сделал следующее.
- Перейдите в « Настройки»> «О телефоне» и нажмите « Номер сборки». пока не будет включен режим разработчика.
- Зайдите в Настройки> Параметры разработчика и включите отладку по USB.
- Подключите телефон к компьютеру через USB. Мне пришлось подключить телефон к встроенному USB-порту компьютера, а не к USB-концентратору, так как это не сработало.
- Вам будет предложено доверять своему компьютеру (доверять ему)
- Запустите Visual Studio
- Откройте свое решение, и теперь ваше устройство должно быть доступно.
Примечание: я заметил, что иногда это также зависит от кабеля, который вы используете. Если вам все еще не повезло, возможно, попробуйте другой кабель.
Спасибо, это помогло. Моя Lenovo Tab 3 отображается в Visual Studio 2015 только тогда, когда я подключаю ее по USB напрямую к компьютеру. Если я попробую через концентратор, он не позволит отладку по USB. Да, вы в порядке, VS необходимо закрыть и убедиться, что телефон вошел в систему, чтобы принять приглашение (item4). tks Если вы оставили свой телефон подключенным, а визуальную студию открытой во время этого процесса, обязательно закройте VS, затем отключите и снова подключите USB. Я сделал все это, и мое мобильное устройство по-прежнему не отображается в моем списке отладчика, несмотря на то, что отображается в мониторе устройств Android. Однако, когда я запускаю отладку, мой телефон по-прежнему будет использоваться как устройство по умолчанию. Я призываю всех нажать F5 перед устранением неполадок.Вы получите запрос на подтверждение на устройстве Android, чтобы спросить, разрешено ли подключение ПК. Это легко пропустить, если экран вашего устройства перешел в спящий режим.
Я должен попытаться подключиться и отключить несколько раз, чтобы получить это уведомление. Не знаю почему. Но в моем случае это помогает.Я использую Visual Studio 2015 с Xamarin, и единственный способ заставить его распознать мой Galaxy S4 - это выключить и снова включить отладку по USB во время работы VS. Это требуется каждый раз, когда я хочу использовать этот телефон с VS. Мне никогда не приходилось делать это с Android Studio.
Как упомянул Грег М.: Вы получите запрос на подтверждение на устройстве Android, чтобы спросить, разрешено ли компьютеру всегда подключаться . Я подтвердил это, и мое устройство всегда распознается. То же решение работает для меня с VS 2015, LG Nexus 4 и Windows 7.2 - Включите параметры разработчика на мобильном устройстве (например, на android 4.2.2 выполните 7 щелчков на «информация о мобильном телефоне» - «серийный номер»)
3 - Отладка USB также в настройках вашего мобильного разработчика
У меня тоже возникла аналогичная проблема, я решил ее, установив драйверы USB, специфичные для моей модели телефона.
В моем случае (Samsung Galaxy S6) драйверы были неприменимы (не устанавливались) и все работает без них.tl; dr Установите драйверы, если вы еще этого не сделали.
Как упоминалось в одном из комментариев выше, я установил драйвер USB для конкретного устройства (драйверы LG находятся здесь ), и это решило мою проблему. Теперь он работает отлично.
У меня создалось (неверное!) Впечатление, что мне не нужно устанавливать драйверы, чтобы включить отладку. Я уже мог подключить свое устройство к ноутбуку для просмотра файлов и т. Д., Поэтому считал, что драйверы не нужны.
Я случайно получил запрос на планшете LG после 20 минут борьбы с этим, и он сказал: «Установить драйверы на ПК?» Я сказал, что конечно, и это наконец сработало.Когда все остальное будет готово, устройство может появиться в списке «Несовместимые устройства». Это могло произойти, если в вашем проекте установлена «Минимальная версия Android» выше, чем версия Android, установленная на вашем устройстве. Если это так, вы можете установить «Минимальную версию Android» в манифесте Android.
Идея для стартапа, рабочее название «ты где?».
Почему бы и нет?
Примечание
Я писал этот пост параллельно работая над приложением. Поэтому он большой и местами не очень логичный.
Футболочка
Начало работы
Сразу в Бой, Попытка номер раз
Как должно выглядеть приложение мне было очевидно, 3 экрана, 3 пуш уведомления, старый добрый Azure в качестве бэкэнда, вырвиглазные цвета (inspired by Yo)
Дальше лучший друг разработчика, карандаш и листок бумаги. Нарисовали мокапы и вперед, к коду. Добавляем компоненты из Xamarin Component Store в проект: Azure Mobile Services и Google Play Services (ICS — я не хочу сейчас заморачиваться со старыми версиями Android).
Собираем и БАМ! — первые грабли.
Программирование на Xamarin под Android, по мнению Xlab. Я с ним согласен :)
При построении проекта Xamarin строит файлы ресурсов, в частности он генерирует файл Resource.Designer.fs содержащий, насколько я понимаю, указатели и/или идентификаторы ресурсов. В частности там есть указатель на идентификатор Id.end который транслируется в следущий код
Looks like the Windows Alpha channel is not quite there yet.
Ну что же, остается только подождать пока оно будет «там», время еще есть. Оставим пока Google Play Services в покое.
Сразу в Бой, попытка номер два
Начинаем реализовывать первый экран - регистрацию.
Оператор |> это pipeline оператор, он передает результат выражения дальше.
Таким образом имеем следующий алгоритм: получаем байты из GetBytes -> вычисляется хеш -> для каждого байта конвертация в HEX формат -> получившийся массив символов склеиваем в строку (метод reduce выполняет функцию + для каждого элемента начиная с первой пары в накопленный итог) -> возвращаем результат вычисления функции.
Одна из проблем над которой я завис на некоторое время: это то что одни модули не видели другие. Например у меня есть модуль для AzureServiceWorker (который в CLR транслируется в статичный класс)
Получение списка контактов
Первое что необходимо сделать после запуска и регистрации: это получить список контактов. Для этого у Xamarin есть полезный модуль Xamarin.Mobile
Ее можно было бы решить еще проще вызвав Async.AwaitIAsyncResult >> Async.Ignore но тогда теряется исключения внутри таски
А вот как я получаю контакты и делаю над ними операции
- book.ToList() конвертируем в List
- |> Seq.filter (fun (x: Contact) -> not (Seq.isEmpty x.Phones)) фильтруем все контакты без телефонов
- |> Seq.map ExtractUserInfo конвертируем все элементы из класса Contracts в UserInfo, далее у нас коллекция элементов UserInfo
- |> Seq.sortBy(fun x -> x.DisplayName) Сортируем
- |> Seq.toList конвертируем в List
- _contacts <- кладем все в mutable поле
- _contacts |> Seq.map (fun x -> x.DisplayName.ToUpperInvariant())<- конвертируем все элементы UserInfo в string, далее у нас коллекция элементов-строк - имена заглавными буквами
- |> Seq.toArray<- конвертируем List в Array чтобы его принял ArrayAdapter
Azure Mobile Servcies
В качестве бэк-энда традиционно я использую Azure Mobile Services. Пока я не стал заморачиваться с NotificationHub, который призван обеспечить доставку Push уведомлений на все платформы. Описывать подключение Azure я тоже не буду, т.к. у них есть свои подробнейшие мануалы.
В приложении я создаю пару констант, они помечаются тегом
Рассмотрим один метод функцию по частям
их использование очень понятное: id tuple вернет Id и т.п.
Всего у меня 5 функций Azure, две из них используются для выполнения Push уведомлений. Чтобы их использовать мне пришлось написать Azure Custom Api функцию
Ну а выполнение Push операции в мобильном приложении тривиально
отмечу только что тут нам нужен результат, поэтому мы используем let-bang а не do!
Неправильное использование рабочих компьютеров компании является обычной практикой среди пользователей во многих компаниях, где отсутствуют надлежащие механизмы мониторинга. Это приводит к напрасной трате ресурсов и снижает скорость достижения общих целей организации. Таким образом, для достижения желаемых результатов необходим эффективный механизм, с помощью которого системный администратор может отслеживать и контролировать рабочие станции сотрудников.
Целью рассматриваемого проекта является разработка приложения на основе Xamarin.Forms, которое позволит системному администратору проводить удаленное наблюдение и контроль рабочих станций на рабочем месте. Проект будет включать разработку двух приложений: одно будет работать на рабочих станциях, другое – на мобильном телефоне администратора. Внедрение механизма позволит администратору не только следить за действиями пользователей, но и даст возможность удаленно контролировать конкретные рабочие станции.
Идея проекта
Итак, в проекте мы создадим два приложения, серверное и клиентское.
Серверное приложение будет постоянно работать на каждой рабочей станции. Приложение сервера будет связано с клиентским приложением через Wi-Fi соединение. Программа делает скриншот активности пользователя по требованию администратора и отправляет его в клиентское приложение. Серверное приложение будет принимать, интерпретировать и выполнять команды, полученные от мобильного (клиентского) приложения.
1.1. Создаем консольное приложение
1.2. Добавляем соответствующее пространство имен
Создаем экземпляр TcpClient и TcpListener . Объявляем строку локальной переменной с именем ipString .
1.3. Узнаем IP адрес вашей машины
Напишем метод внутри функции Main , который будет перехватывать и возвращать IP-адрес машины.
1.4. Слушаем порт 1234
1.5. Создаем соединение с клиентом
1.6. Пишем метод Sleep
Расширяем пространство имён проекта. Добавляем внутри функции Main метод Sleep :
2.1. Создаем проект Xamarin.Forms
Открываем Visual Studio и переходим в New Project-> Cross-platform-> Xamarin.Forms-> Blank app . Даем ему имя, например, XamarinFormsClient .
2.2. Создаем класс соединения
Далее в нашем проекте нужно определить класс соединения для создания экземпляра TCP Client. Создаем новый класс с именем Connection.cs и записываем в него следующий код.
2.3. Создание пользовательского интерфейса
Нам нужны два редактируемых текстовых поля для IP-адреса и порта, и одна кнопка для соединения с сервером. Откроем файл макета MainPage и заменим код на следующий:
2.4. Описываем метод соединения
Опишем взаимосвязь элементов управления пользовательского интерфейса с классом MainPage . Далее свяжемся с приложением сервера, используя IP-адрес и порт рабочей станции.
2.5. Обновление класса приложения
Открываем файл App.xaml внутри этого класса и добавляем следующий код в конструктор класса App.
Давайте проверим соединение сервера и клиентского приложения, которое мы только что создали. Основной модуль запуска приложения Xamarin.Forms отобразит главную страницу. Запустим серверное приложение, скопируем IP-адрес и порт рабочей станции из серверного приложения. Поместим в клиентское приложение и нажимаем Connect.
Поговорим о том, как будет работать функция скриншота. Клиент запрашивает скриншот, отправляет команду в виде строки "TSC1" , на рабочей станции серверное приложение делает скриншот. Размер изображения может быть большим, поэтому мы преобразуем данные снимка экрана в пакеты байтового типа и отправляем клиентскому приложению. Когда клиент получит пакеты байтового типа, он преобразует их в исходную форму.
Добавим функцию выключения рабочей станции. Если клиент отправляет команду “SHTD3” серверному приложению, сервер выполнит функцию выключения компьютера.
Вернемся к серверному приложению и опишем функции снимка экрана выключения рабочей станции. Откроем файл program.cs и запишем следующий код внутри цикла while , который мы реализовали ранее.
Добавим в серверное приложение следующие пространства имен. Иначе Visual Studio не распознает ключевое слово graphics функции снимка экрана.
Вернемся к program.cs и поместите эти функции в основной класс.
Итак, мы закончили с серверным приложением.
7.1. Создаем страницу операций
Возвращаемся в клиентское приложение (Xamarin.Forms) и добавляем новый ContentPage с именем OperationsPage . Внутри этого макета добавим следующий код, чтобы создать больше кнопок.
7.2. Добавляем в класс операций методы ожидания
Открываем файл OperationPage.xaml и переносим следующий код.
8. Тестируем!
Запускаем оба приложения – сервер и клиент. Вводим IP-адрес и порт рабочей станции, которые вы видите на экране вывода приложения сервера, в клиентское приложение и нажимаем Connect .
После подключения к серверу теперь мы можем выполнять различные команды.
Ура! Всё работает. При нажатии на Sleep рабочая станция переходит в спящий режим. При нажатии на Take Screenshot через пару мгновений скриншот рабочей станции оказывается внутри клиентского приложения.
Первая часть будет демонстрировать, как создать приложение, которое будет преобразовать буквенно-цифровой номер, введенный пользователем в числовой номер телефона и затем вызывать этот номер.
Пример итогового приложения
И так, условимся, что мы начинаем новый проект в Visual Studio с Xamarin.Forms под названием Phoneword:
1). Сначала запускаем Visual Studio. На картинке начальное окно программы:
Начальное окно программы Visual Studio
Нажимаем на кнопку создания нового проекта
3). В диалоге New Project, жмем Cross-Platform, выбираем шаблон Mobile App (Xamarin.Forms), задаем имя Phoneword, выбираем расположение проекта и жмем кнопку OK:
Диалог создания проекта
Диалог выбора платформ и стратегии развития проекта
5). В разделе Solution Explorer, проекта Phoneword, делаем двойной щелчок на MainPage.xaml для открытия этого файла в редакторе:
Открытый файл MainPage.xaml в редакторе
6). В MainPage.xaml, удаляем весь код шаблона и заменяем кодом, который ниже. Этот код декларативно определяет интерфейс пользователя для страницы:
Сохраняем изменения в MainPage.xaml , нажав комбинацию CTRL+S, и закрываем файл.
7). В разделе Solution Explorer, распускаем MainPage.xaml и двойным щелчком открываем файл кода страницы MainPage.xaml.cs:
Файл кода страницы MainPage.xaml.cs
8). В коде MainPage.xaml.cs, удаляем весь код шаблона и заменяем его на следующий код. Методы OnTranslate и OnCall должны быть выполнены в ответ на нажатие кнопок Translate и Call со стороны пользовательского интерфейса соответственно:
Сохраняем изменения в файле MainPage.xaml.cs нажатием комбинации CTRL+S, закрываем файл.
Добавляем новый элемент в проект
Диалог добавления нового класса
11). В файле PhoneTranslator.cs, удаляем весь шаблон кода и заменяем на ниже указанный. Этот код транслирует буквы в телефонный номер:
Сохраняем файл PhoneTranslator.cs , нажатием CTRL+S, и закрываем файл.
Добавляем новый элемент в проект
Добавление нового интерфейса
14). В файле IDialer.cs, удаляем шаблон кода по умолчанию и заменяем его кодом, указанным ниже. В этом коде определен метод Dial , который должен быть реализована каждой платформе для набора переведенного номера телефона:
Сохраняем изменения IDialer.cs нажатием CTRL+S, закрываем файл.
Замечание. Общий код для приложения сейчас закончен. На уровне определенной платформы код набора номера теперь будет реализован как DependencyService.
Добавляем элемент к проекту Phoneword.iOS
16). В разделе диалога Add New Item, выбираемApple > Code > Class, вводим имя PhoneDialer, и жмем на кнопку Add:
Добавляем новый класс к проекту iOS
17). В файле PhoneDialer.cs, удаляем весь шаблон кода и заменяем его на ниже приведенный. Этот код содержит метод Dial который должен быть использован платформой iOS для набора транслированного телефонного номера:
Сохраняем файл PhoneDialer.cs , нажатием CTRL+S, и закрываем файл.
Добавляем элемент к проекту Phoneword.Android
19). В разделе диалога Add New Item, выбираем Android > Code > Class, вводим имя PhoneDialer, и жмем на кнопку Add:
Добавляем новый класс к проекту Android
20). В файле PhoneDialer.cs, удаляем весь шаблон кода и заменяем его на ниже приведенный. Этот код содержит метод Dial который должен быть использован платформой Android для набора транслированного телефонного номера:
Сохраняем файл PhoneDialer.cs , нажатием CTRL+S, и закрываем файл.
Замечание. Обратите внимание, что этот код предполагает, что вы используете новейший Android API.
21). Во вкладке Solution Explorer, в проекте Phoneword.Android, двумя щелчками открываем файл MainActivity.cs , удаляем весь шаблон кода и заменяем на следующий код:
Сохраняем файл MainActivity.cs , нажатием CTRL+S, и закрываем файл.
23). В секции Required permissions , разрешаем телефону выполнять звонок CALL_PHONE:
Разрешаем телефону звонить
Сохраняем файл манифеста, нажатием CTRL+S, и закрываем файл.
Добавляем элемент к проекту Phoneword.UWP
Добавляем новый класс к проекту UWP
26). В файле PhoneDialer.cs, удаляем весь шаблон кода и заменяем его на ниже приведенный. Этот код содержит метод Dial который должен быть использован платформой Universal Windows Platform для набора транслированного телефонного номера:
Сохраняем файл PphoneDialer.cs , нажатием CTRL+S, и закрываем файл.
Добавляем новую ссылку к проекту UWP
28). В диалоге Reference Manager , выбираем Universal Windows > Extensions > Windows Mobile Extensions for UWP, и жмем на кнопку OK:
Диалог менеджера ссылок
Замечание. В v10.0.16299.0 Windows Mobile Extensions для UWP должен быть выбран класс PhoneLine .
29). Во вкладке Solution Explorer, в проекте Phoneword.UWP, делаем двойной щелчок и открываем файл Package.appxmanifest:
Настройка файла Package.appxmanifest
30). На странице Capabilities , разрешаем возможность звонить Phone Call:
Сохраняем изменения в файле нажатием CTRL+S, и закрываем файл.
32). Во вкладке Solution Explorer, кликаем правую кнопку на проекте Phoneword.UWP и выбираем Set as StartUp Project:
Устанавливаем проект по умолчанию
33). В панели инструментов Visual Studio, жмем кнопку Start (треугольная кнопка, которая имитирует кнопку проигрывания) для запуска приложения:
Запущенное приложение UWP
34). Во вкладке Solution Explorer, жмем правой кнопкой на проект Phoneword.Android выбираем пункт Set as StartUp Project.
35). На панели инструментов Visual Studio, жмем на кнопку Start (треугольная кнопка, которая имитирует кнопку проигрывания) для запуска приложения Android в эмуляторе:
Читайте также: