понедельник, 28 апреля 2014 г.

Android API: package "android.net.wifi" или обёртка для работы с Wi-Fi


Хотел написать программку для блога, использующую Wi-Fi, точнее анализатор каналов, но обнаружил что в Delphi из коробки, нет готовой обёртки для работы с Wi-Fi. Решил написать эту обёртку сам. Это скорее заметка, чем статья, т.к. просто решил выложить обёртку для общественности.












В обёртке реализованы все классы и их методы (доступные в API 10) со страницы: http://developer.android.com/reference/android/net/wifi/package-summary.html

Т.о. эту обёртку можно использовать на всех устройствах с API 10 и выше. Писалось в Delphi XE6, на Delphi XE5 не проверялось.

Список продублирую сюда:

Classes
  • ScanResult 
  • WifiConfiguration 
  • WifiConfiguration.AuthAlgorithm
  • WifiConfiguration.GroupCipher  
  • WifiConfiguration.KeyMgmt 
  • WifiConfiguration.PairwiseCipher 
  • WifiConfiguration.Protocol 
  • WifiConfiguration.Status 
  • WifiInfo 
  • WifiManager 
  • WifiManager.MulticastLock 
  • WifiManager.WifiLock 
Enums
  • SupplicantState

Для использования данной обёртки необходимо:
  1. Кладём обёртку в папку с вашим приложением (исходниками) и подключаем её в «uses», путём добавления строчки «Androidapi.JNI.Net.Wifi»
  2. Для того чтобы приложение могло работать через обёртку с Wi-Fi, необходимо дать разрешения в «User Permissions»(Project->Optoins->Uses Permissions). Ставим галочки напротив:
  • ACCESS_WIFI_STATE
  • CHANGE_WIFI_STATE
  • CHANGE_WIFI_MULTICAST_STATE

Всё, теперь можно по полной использовать возможности Android API для работы с Wi-Fi.

Т.к. обёртку писал впервые, без вопросов не обошлось. 
Огромное спасибо Бровину Ярославу (Embarcadero) за консультации. 

Я написал небольшое приложение, демонстрирующее часть возможностей.

Скриншоты:




Видео:


Исходный код: Скачать с Google Drive


p.s. Если вам пригодилась/понравилась данная заметка, то не стесняйтесь писать об этом в комментариях. Именно ваши отзывы/вопросы являются для меня неким стимулом в наполнении блога полезной информацией.

9 комментариев:

  1. Можно ли задействовать эту обертку в С++ Builder XE6? Спасибо.

    ОтветитьУдалить
    Ответы
    1. К сожалению, у меня нет С++ Builder XE6. Скорее всего, необходимо перевести код из Delphi в C++.

      Удалить
  2. Не обязательно, подключаем *.pas к проекту, по Alt+F11 добавляем его к главной форме и юзаем. Должно работать :)

    ОтветитьУдалить
  3. А есть ли возможность подключиться к WIFI сети из приложения ?

    ОтветитьУдалить
  4. Привет. Каким образом можно подключиться к WIFI сети программно ? Подскажите хотя бы где копать

    ОтветитьУдалить
  5. Привет. Такой вопрос по поводу обвязки. Почему IP адрес имеет такое значение ? И с чем это связано.

    ОтветитьУдалить
    Ответы
    1. Все разобрался сорри за спам :)

      Если вдруг что код :

      IPAdd := StrToInt(WifiInfo.getIpAddress.ToString) and $FFFFFFFF;
      ip1 := (IPAdd shr 24) and $FF ;
      ip2 := (IPAdd shr 16) and $FF ;
      ip3 := (IPAdd shr 8) and $FF ;
      ip4 := (IPAdd) and $FF ;
      s := IntToStr(ip4)+'.'+IntToStr(ip3)+'.'+IntToStr(ip2)+'.'+IntToStr(ip1);

      Спасибо за статью

      Удалить
  6. Hi, how can add the property to change the wifi_country_code

    BR

    ОтветитьУдалить