воскресенье, 1 декабря 2013 г.

Проверка подключения к интернету на мобильных устройствах с Delphi XE5

Dave Nottage поможет нам решить эту задачу. Он разработал специальный класс для определения состояния подключения к интернету, класс работает как на Android, так и на iOS.

Класс умеет:
  • Определять состояние: Подключено к WIFI, мобильному интернету или вовсе не подключено.
  • Определять SSID.
Upd (23.04.14). Проверил код на Delphi XE6 и добавил информацию о необходимых изменениях.
Upd (3.10.14). Проверил в Delphi XE7 и Android 4.4.2.
UPD. (18.05.17) Добавил ссылку на свою версию данного класса. Проверена на Delphi (Berlin/Tokyo) 10.* Update *


Доступные для вызова функции:
TCustomNetworkState = class(TObject)
  function GetSSID: String; virtual; abstract;
  function IsConnected: Boolean; virtual; abstract;
  function IsWifiConnected: Boolean; virtual; abstract;
  function IsMobileConnected: Boolean; virtual; abstract;
end;

Для использования этого класса в своём проекте необходимо чтобы файлы ниже находились в папке вашего проекта:
  • libReachability.a
  • NetworkState.pas
  • NetworkState.iOS.pas
  • NetworkState.Android.pas
  • SCNetworkReachability.pas
  • CaptiveNetwork.pas
Для платформы Android необходимо также выставить права «Access Network State» и «Access Wifi State». (Где и как это сделать, читайте тут)


Dave Nottage написал демо приложение, для демонстрации возможностей класса. Ниже я привожу прямую ссылку на этот проект. Из него можно вытащить файлы класса и добавить в свой проект.

UPDATE (23.04.14):
Чтобы код заработал в Delphi XE6, необходимо:
Файл "NetworkState.Android.pas": в "uses" добавить модуль "Androidapi.Helpers".

С сайта автора: Network State Demo (Ссылка перестала работать)
Бекап в блоге: Network State Demo

(18.05.17) Ссылка на мой класс: https://github.com/AndrewEfimov/Android-API/tree/master/ActiveNetworkInfo

p.s. Это вольный перевод статьи Checking for an internet connection on mobile devices with Delphi XE5 (Автор:  Dave Nottage)

3 комментария:

  1. Извените, что я не в тему, а как оследить идёт вызов или нет

    ОтветитьУдалить
    Ответы
    1. Это можно отследить при помощи Android API: http://developer.android.com/reference/android/telephony/TelephonyManager.html
      http://developer.android.com/reference/android/telephony/PhoneStateListener.html

      Удалить