Настройка параметров Wi-Fi и сетевых профилей с помощью Mx Wi-Fi
Это руководство проведет вас через создание приложения EMDK для Android, которое будет использовать функции Mx, представленные в EMDK для Android API, для выполнения настроек устройства. Mx представляет собой набор корпоративных функций поверх стандартного, коммерчески доступного Android Open Source Project. Так что этот урок будет сосредоточен на Диспетчер Wi-Fi API, который позволяет вам управлять настройками Wi-Fi вашего устройства, а также управлять сетевыми профилями, которые будут использоваться для подключения и запоминания сетей.
Все вышеперечисленные функции можно настроить по своему усмотрению с помощью мастера профилей EMDK, а также программно с помощью Wi-Fi Manager API. В этом руководстве мы реализуем некоторые из этих функций с помощью мастера EMDK.
Учебное пособие будет предназначено для настройки параметров Wi-Fi со следующими функциями и последовательностью:
Нажмите Вот чтобы увидеть, как добавить конкретную функцию в диспетчер профилей.
Укажите «WiFiProfile» в качестве имени профиля для этого урока.
Примечание. Вы можете указать любое имя профиля, но не забудьте получить к нему аналогичное имя в коде Android.
Теперь вы можете увидеть все эти функции MX в левой части окна редактора профилей. Выберите функцию «Wi-Fi» из списка и нажмите «Стрелка вправо». Используя эту функцию, вы можете управлять настройками Wi-Fi вашего устройства, а также профилями сети, которые будут использоваться для подключения и запоминания сетей, как описано ранее.
Нажмите на функцию Wi-Fi. Список параметров будет заполнен.
Вы можете увидеть различные настройки функции Wi-Fi в мастере, как упоминалось вначале. Вы можете настроить все эти параметры как в мастере, так и программно.
Укажите имя в поле «Имя» (например, MyWiFi). Поле «Имя» используется для идентификации каждой функции, которая требуется при программном редактировании объектов. Вы также можете оставить поле «Имя» пустым.
Итак, давайте начнем реализовывать настройки один за другим, как упоминалось ранее. В настоящее время Wi-Fi устройства отключен. Перед настройкой любых параметров, мы должны сначала включить Wi-Fi. Итак, начнем с первого шага с включения Wi-Fi. Выберите «Включить Wi-Fi» и нажмите «Включить». Это включит Wi-Fi вашего устройства.
Теперь мы добавим новую сеть Wi-Fi. Для этого выберите «Действие сети» в разделе «Управление настройками Wi-Fi-радио». В этом раскрывающемся списке будут отображаться различные сетевые операции, которые могут выполняться на Wi-Fi вашего устройства.
Примечание. Оставьте другие настройки без изменений. Хотя вы можете настроить любые параметры, если хотите.
Нажмите на «Добавить новую сеть», и он покажет настраиваемые параметры, связанные с этим параметром.
Вы можете выбрать различные типы «Режим безопасности» (Открыть, Личный, Корпоративный) и настроить параметры, связанные с каждым типом. Для этого урока мы оставим «Режим безопасности» как «Личный».
Теперь введите данные для предоставленных полей. Укажите SSID как «rholink-ap». Выберите «Режим WPA» в качестве WPA. Введите кодовую фразу, которая является паролем для аутентификации в вашей сети. Проверьте «Защитить ключ?» флажок, чтобы пароль был защищен. Оставьте остальные настройки без изменений.
Примечание. Конфигурации могут сильно зависеть от сети, которую вы добавляете.
Нажмите Применить и Готово.
Нажмите «Закрыть».
Замечания:
Теперь «EMDKConfig.xml» создается в папке «\ assets». Этот файл будет содержать определение всех ваших профилей, которые вы создаете.Вы можете просмотреть файл «EMDKConfig.xml», созданный в папке «\ assets», чтобы убедиться, что он отражает изменения, внесенные в параметры с помощью графического интерфейса EMDK Profile Manager ранее. Тем не менее, рекомендуется, чтобы этот файл не обновлялся вручную и контролировался только через Менеджер профилей. Таким образом, вы можете увидеть запись всех элементов в файле EMDKConfig.xml, который мы настроили.
Теперь мы начнем добавлять код.
Сначала вы должны добавить ссылки на библиотеки:
import com.symbol.emdk. *; import com.symbol.emdk.EMDKManager.EMDKListener; импорт android.widget.Toast;Затем вы должны расширить действие для реализации EMDKListener.
открытый класс MainActivity расширяет Activity реализует EMDKListener {.. .. .. .. .. .. ... @Override public void onClosed () {// Заглушка автоматически генерируемого метода TODO} @Override public void onOpened (EMDKManager emdkManager) { // TODO Автоматически сгенерированная заглушка метода}}
Теперь мы создадим некоторые глобальные переменные для хранения имени профиля, а также экземпляры объектов EMDKManager и ProfileManager с переменной состояния при применении профиля. Мы также создадим глобальные переменные для хранения элементов и значений пользовательского интерфейса, необходимых в этом приложении. Некоторые из переменных используются для хранения имени, типа и описания в случае каких-либо ошибок. Эти переменные будут использоваться во всем коде.
Примечание: проверьте имя профиля в коде с тем, которое было создано в диспетчере профилей. Они оба должны быть идентичны.
// Назначаем имя профиля, используемое в EMDKConfig.xml private String profileName = "WiFiProfile"; // Объявляем переменную для хранения объекта ProfileManager private ProfileManager profileManager = null; // Объявляем переменную для хранения объекта EMDKManager private EMDKManager emdkManager = null; // Содержит имя ошибки parm (подфункция с ошибкой) private String errorName = ""; // Содержит тип признака-ошибки (корневая функция с ошибкой) private String errorType = ""; // содержит описание ошибки для parm или характерной ошибки. private String errorDescription = ""; // содержит статус операции профиля private String status = "";В методе onCreate мы вызываем getEMDKManager, чтобы EMDK можно было инициализировать и проверить, готов ли он.
// Объект EMDKManager будет создан и возвращен в обратном вызове. EMDKResults results = EMDKManager.getEMDKManager (getApplicationContext (), this); // Проверка состояния возврата getEMDKManager if (results.statusCode == EMDKResults.STATUS_CODE.SUCCESS) {// Успешное создание объекта EMDKManager} else {// Ошибка создания объекта EMDKManager}
Пока ваш код должен выглядеть так:
Теперь нам нужно использовать метод onOpened, чтобы получить ссылку на EMDKManager. Интерфейс EMDKListener вызовет это событие, когда EMDK будет готов к использованию. Интерфейс EMDKListener должен быть реализован для получения ссылки на API-интерфейсы EMDKManager. Это событие пройдет экземпляр EMDKManager, и мы назначим его глобальной переменной emdkManager, которую мы создали на предыдущих шагах. Затем мы используем этот экземпляр объекта, чтобы получить экземпляр ProfileManager и назначить его глобальной переменной profileManager. Вот как мы будем взаимодействовать с API в остальной части кода:
Примечание. Переименуйте аргумент метода onOpened из arg0 в emdkManager.
// Этот обратный вызов будет выполнен, когда EMDK будет готов к использованию. statusTextView.setText («Успешное открытие EMDK.»); this.emdkManager = emdkManager; // Получить объект ProfileManager для обработки профилей profileManager = (ProfileManager) emdkManager .getInstance (EMDKManager.FEATURE_TYPE.PROFILE);Теперь, когда у нас есть ссылка на ProfleManager, мы используем ее для установки и активации ранее созданного профиля с использованием метода processProfile. Мы могли бы также выполнить это действие в другое время, например, когда кто-то нажал кнопку, но мы решили сделать это, как только EMDK будет готов:
if (profileManager! = null) {String [] modifyData = new String [1]; // Вызовите processPrfoile с именем профиля и флагом SET для создания профиля. ModifyData может быть нулевым. EMDKResults results = profileManager.processProfile (profileName, ProfileManager.PROFILE_FLAG.SET, modifyData); if (results.statusCode == EMDKResults.STATUS_CODE.CHECK_XML) {} else {// Показать диалог сбоя AlertDialog.Builder builder = new AlertDialog.Builder (this); builder.setTitle ( "Отказ"); builder.setMessage ("Не удалось применить профиль ...") .setPositiveButton ("ОК", новый DialogInterface.OnClickListener () {public void onClick (диалог DialogInterface, int id) {}}); AlertDialog alert = builder.create (); alert.show (); }}
Этот метод processProfile возвращает результат применения определенного профиля, который мы установили с помощью мастера профилей EMDK в EMDKResults ссылка. Если профиль успешно обработан, он возвращает статус CHECK_XML, а затем мы продолжаем анализировать ответ, чтобы получить более подробную информацию о том, был ли профиль успешно применен или нет. В противном случае мы отображаем сообщение о сбое в диалог ,
Примечание: 1. Существует разница между успешной обработкой профиля и его успешным применением.
Примечание: 2. Если статус отличается от CHECK_XML, мы просто отображаем сообщение об ошибке. На самом деле вы можете проверить различные типы статуса и отобразить соответствующее сообщение, что не входит в рамки этого учебного пособия.
В случае статуса CHECK_XML, мы получаем строку ответа XML из результата, используя метод getStatusString.
// Получить XML-ответ в виде строки String statusXMLResponse = results.getStatusString ();Далее, мы бы проанализировали эту строку ответа XML, используя XML Pull Parser для того, чтобы получить состояние и параметры ошибки, если таковые имеются. XML Pull Parser - это интерфейс, который определяет функции синтаксического анализа, предоставляемые в API XMLPULL V1 (посетите этот сайт, чтобы узнать больше об API и его реализациях). При анализе мы будем искать конкретные теги состояния (Имя ошибки, Тип ошибки и Описание ошибки) в случае каких-либо ошибок, и в случае их обнаружения мы получим эти значения в соответствующих глобальных переменных, которые мы объявили на предыдущем шаге.
try {// Создание экземпляра XML Pull Parser для анализа ответа XmlPullParser parser = Xml.newPullParser (); // Предоставляем строковый ответ для String Reader, который читает // для синтаксического анализатора parser.setInput (new StringReader (statusXMLResponse)); // Вызвать метод для анализа ответа parseXML (parser); } catch (XmlPullParserException e) {e.printStackTrace (); }
Примечание. Здесь мы вызвали метод parseXML для разбора строки ответа XML. Мы объявим метод на следующем шаге.
После анализа ответа мы отобразим результат применения этого профиля в диалог вызвав метод displayResults, который мы объявим в следующих шагах.
// вызов метода для отображения результатов в диалоге displayResults ();Ваш полный метод onOpened теперь должен выглядеть так:
Вы увидите несколько ошибок, поскольку мы не объявили соответствующие методы для анализа ответа и отображения результата. Давайте сделаем это один за другим. На этом шаге мы создадим метод parseXML, который использует XML Pull Parser проанализировать ответ строки XML и установить параметры состояния и ошибки, если таковые имеются.
В ответ мы должны захватить name и desc для тега parm-error, type и desc для тега характеристической ошибки в случае каких-либо ошибок.
// Метод для анализа XML-ответа с использованием XML Pull Parser public void parseXML (XmlPullParser myParser) {int event; try {event = myParser.getEventType (); while (event! = XmlPullParser.END_DOCUMENT) {String name = myParser.getName (); switch (событие) {case XmlPullParser.START_TAG: // Получить статус, имя ошибки и описание в случае // parm-error if (name.equals ("parm-error")) {status = "Failure"; errorName = myParser.getAttributeValue (null, "name"); errorDescription = myParser.getAttributeValue (null, "desc"); // Получить статус, тип ошибки и описание в случае // parm-error} else if (name.equals ("attribute-error")) {status = "Failure"; errorType = myParser.getAttributeValue (null, "type"); errorDescription = myParser.getAttributeValue (null, "desc"); } перерыв; case XmlPullParser.END_TAG: break; } event = myParser.next (); }} catch (Exception e) {e.printStackTrace (); }}Теперь ваш полный метод parseXML должен выглядеть так:
Вы по-прежнему увидите одну ошибку, поскольку нам нужно объявить метод displayResults для отображения результата работы профиля в диалог , Перед отображением результатов мы должны сформировать содержание результата, который будет отображаться первым, особенно в случае ошибок. Это можно сделать, создав метод buildFailureMessage.
В этом методе сообщение об ошибке в случае ошибки формируется следующим образом:
- Имя и описание ошибки, если ответ содержит parm-error.
- Тип и описание ошибки, если в ответе содержится характеристика-ошибка.
- Имя, тип и описание ошибки, если ответ содержит как parm-error, так и характеристическую ошибку.
Метод buildFailureMessage будет иметь следующий код для соответствия вышеупомянутым критериям.
// Метод для создания сообщения об ошибке, который содержит имя, тип и // описание соответствующей ошибки (parm, характеристика или оба) public String buildFailureMessage () {String faultMessage = ""; if (! TextUtils.isEmpty (errorName) &&! TextUtils.isEmpty (errorType)) faultMessage = errorName + ":" + "\ n" + errorType + ":" + "\ n" + errorDescription; иначе if (! TextUtils.isEmpty (errorName)) faultMessage = errorName + ":" + "\ n" + errorDescription; иначе failMessage = errorType + ":" + "\ n" + errorDescription; возвращать failMessage; }
Метод buildFailureMessage должен выглядеть так:
На этом шаге мы добавим метод displayResults для отображения результата работы профиля в диалог , Диалог будет отображать статус «Успешно» или «Неудачно» с соответствующим сообщением, основанным на ответе операции профиля.
// Метод для отображения результатов (Состояние, Имя ошибки, Тип ошибки, Ошибка // Описание) в // диалоговом окне public void displayResults () {// Диалоговое окно оповещения для отображения состояния создания профиля // Операция функций MX AlertDialog .Builder alertDialogBuilder = new AlertDialog.Builder (MainActivity.this); if (TextUtils.isEmpty (errorDescription)) {alertDialogBuilder.setTitle ("Success"); alertDialogBuilder.setMessage ("Профиль успешно применен ..."); } else {// установить заголовок alertDialogBuilder.setTitle (status); // вызов метода buildFailureMessage () для установки сообщения об ошибке в // диалоговом окне alertDialogBuilder.setMessage (buildFailureMessage ()); } alertDialogBuilder.setCancelable (false) .setPositiveButton ("ОК", новый DialogInterface.OnClickListener () {public void onClick (диалог DialogInterface, int id) {}}); // создаем диалог оповещения AlertDialog alertDialog = alertDialogBuilder.create (); // показать это alertDialog.show (); }
Метод displayResults должен выглядеть так:
Вы можете видеть, что все ошибки исчезли.
Теперь давайте переопределим метод "onDestroy", чтобы мы могли высвободить ресурсы EMDKManager:
@Override protected void onDestroy () {// TODO Сгенерированный автоматически метод stub super.onDestroy (); // Очистить объекты, созданные EMDK manager emdkManager.release (); }
Ваш метод onDestroy должен теперь выглядеть так:
Это оно!!! Мы закончили со всей частью кодирования и настройки, которая позволит нам включить Wi-Fi и добавить сеть, указанную в мастере профилей EMDK.
Подключите устройство (с последней версией EMDK) к USB-порту.
Замечания:
Убедитесь, что устройство находится в режиме USB отладки.Перед запуском приложения мы позаботимся о том, чтобы Wi-Fi был отключен. Зайдите в «Настройки» и отключите Wi-Fi, переключая статус.
Запустите приложение. Если настройки в мастере успешно применены, приложение будет отображать успех Тост ,
Вы можете увидеть Оповещение Диалог отображается с сообщением об успехе. Это означает, что он включил Wi-Fi и добавил сеть с именем «rholink-ap», которую мы настроили в мастере ранее в этом руководстве.
Примечание. В случае возникновения каких-либо ошибок в этом диалоговом окне вы увидите статус сбоя с соответствующим сообщением об ошибке.
Для проверки перейдите в Настройки. Вы можете видеть, что Wi-Fi включен.
Нажмите на опцию Wi-Fi, и вы увидите, что сеть «rholink-ap» была успешно добавлена в список доступных сетей. Значок блокировки рядом с изображением Wi-Fi указывает на то, что это защищенная паролем защищенная сеть.
Примечание. Этот параметр только что добавил новую сеть. Мы еще не подключены к этой новой сети, которую мы добавили.
Теперь мы подключимся к существующей сети Wi-Fi. Вы можете подключиться к любой из существующих сетей Wi-Fi, но мы подключимся к той, которую мы только что добавили (rholink-ap). Так что откройте менеджер профилей, выбрав наш проект, как мы делали ранее для добавления сети.
Нажмите на кнопку «Редактировать», и появится окно редактора профиля для редактирования предыдущих конфигураций.
Выберите «Сетевое действие» как «Подключиться к существующей сети» из выпадающего списка.
Введите SSID сети, к которой вы хотите подключиться. В этом уроке мы подключимся к сети с помощью SSID "rholink-ap", который мы создали ранее.
Нажмите Применить, Готово и Закрыть, чтобы сохранить настройки.
Запустите приложение еще раз.
Приложение отображает сообщение об успехе. Чтобы проверить, зайдите в Настройки -> Wi-Fi. Вы можете видеть, что Wi-Fi успешно подключен к сети с помощью SSID «rholink-ap», который мы указали в мастере.
Теперь мы отключим Wi-Fi от существующей сети с помощью мастера. Перейдите в Profile Manager и нажмите кнопку Edit, как мы делали в предыдущих операциях.
На этот раз выберите «Сетевое действие» как «Отключение от существующей сети». Введите SSID сети, от которой вы хотите отключиться. В этом уроке мы введем SSID как «rholink-ap», к которому мы сейчас подключены.
Нажмите Применить, Готово и Закрыть.
Запустите приложение.
Успех Тост указывает на то, что операция прошла успешно.
Давайте проверим это. Зайдите в Настройки -> Wi-Fi и вы увидите, что устройство успешно отключилось от сети «rholink-ap».
Наконец, мы удалим существующую сеть с помощью мастера профилей EMDK. Итак, снова зайдите в Диспетчер профилей и нажмите кнопку «Редактировать». Выберите «Действие сети» как «Удалить существующую сеть». На этот раз мы предоставим другой SSID только для изменения.
На приведенном выше экране вы можете увидеть сеть с SSID «Deven». Давайте удалим эту сеть из списка, указав SSID «Deven» в мастере.
Нажмите Применить, Готово и Закрыть.
Запустите приложение.
Сообщение об успехе указывает, что сеть была успешно удалена. Так что зайдите в Настройки -> Wi-Fi и вы не увидите сеть с SSID «Deven» в списке доступных сетей.
Примечание. Если сеть находится в пределах диапазона, она может снова появиться в списке при периодическом сканировании устройства.
Вот некоторые из конфигураций, которые мы реализовали с помощью функции Wi-Fi Manager в Mx. Вы можете попробовать любые конфигурации и управлять настройками Wi-Fi вашего устройства, а также профилями сети.
Теперь, когда вы узнали, как настраивать параметры Wi-Fi вашего устройства, а также профили сети на устройствах Symbol Android с помощью приложений, использующих функцию Mx Wi-Fi, давайте попробуем разобраться и реализовать некоторые другие функции Mx. Поэтому в следующем руководстве мы сосредоточимся на функции «Диспетчер сертификатов» и попытаемся изучить эту функцию, создав учебник.
Проверьте «Защитить ключ?