Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как добавить в приложение проверку наличия соединения с Интернетом?


Delpher-X

Вопрос

Итак, как добавить в приложение проверку наличия соединения с Интернетом? Я всегда пользовался кодом: 

var
NetControl : DWORD;
begin
NetControl := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@NetControl, 0);
end;

Однако здесь он явно не подходит, так как предназначен для Windows, а меня интересует Android. Я пробовал использовать компонент IdIPWatch, но он все время верещал о том что Интернета нет, несмотря на то что смартфон был вполне подключен к сети. 

Ссылка на комментарий

Рекомендуемые сообщения

  • 1
В 09.10.2021 в 06:55, Delpher-X сказал:

Итак, как добавить в приложение проверку наличия соединения с Интернетом? Я всегда пользовался кодом: 

Однако здесь он явно не подходит, так как предназначен для Windows, а меня интересует Android. Я пробовал использовать компонент IdIPWatch, но он все время верещал о том что Интернета нет, несмотря на то что смартфон был вполне подключен к сети. 

https://github.com/AndrewEfimov/FMX-Android-API-Examples/tree/master/ActiveNetworkInfo

Ссылка на комментарий
  • -1
3 часа назад, Sascha сказал:

Не подходит. там используется модуль ActiveNetworkInfo.Android, но Delphi  при добавлении данного модуля в uses, подчеркивает его красным и вообще делает вид, что с ним незнакома. Там вроде еще как говорится, что нужно в главный код добавить: 

uses
  System.StartUpCopy,
  FMX.Forms,
  uMain in 'uMain.pas' {FormMain},
  ActiveNetworkInfo.Android in '..\class\ActiveNetworkInfo.Android.pas';

Однако, совершенно непонятно что это за путь и где его брать. Было бы лучше, если бы автор поподробнее развил данный момент.

Ссылка на комментарий
  • 0
В 09.10.2021 в 14:00, krapotkin сказал:

самая простая проверка - это попытка просто что-то заведомо существующее запросить

например

http.head('https://www.google.com')

Поподробнее, пожалуйста. 

Ссылка на комментарий
  • 1
4 часа назад, Delpher-X сказал:

А Java и Kotlin тут вообще при чем? 

)))Ну наверное при том что вы пишете для андроид, а самое верное это сделать то что советует Гугл. А в Делфи там переделывать 5 секунд.

Если вы этого не можете переделывать код из java в Делфи и не хотите учиться этому, совет, не пишите для андроид вообще/

 

Ссылка на комментарий
  • 1
10 часов назад, Delpher-X сказал:

Не подходит. там используется модуль ActiveNetworkInfo.Android, но Delphi  при добавлении данного модуля в uses, подчеркивает его красным и вообще делает вид, что с ним незнакома. 

Не, это рабочий модуль, я использую его в Delphi 10.4

Ссылка на комментарий
  • -1
15 часов назад, Sascha сказал:

Не, это рабочий модуль, я использую его в Delphi 10.4

Блджад, я же писал: 

В 11.10.2021 в 23:35, Delpher-X сказал:

Там вроде еще как говорится, что нужно в главный код добавить: 

uses
  System.StartUpCopy,
  FMX.Forms,
  uMain in 'uMain.pas' {FormMain},
  ActiveNetworkInfo.Android in '..\class\ActiveNetworkInfo.Android.pas';

Однако, совершенно непонятно что это за путь и где его брать. Было бы лучше, если бы автор поподробнее развил данный момент.

Каков полный путь к модулю? У меня Delphi 10.3, если что. 

Ссылка на комментарий
  • 0
22 часа назад, OnePeople сказал:

))Ну наверное при том что вы пишете для андроид, а самое верное это сделать то что советует Гугл. А в Делфи там переделывать 5 секунд.

Не все знают Java. В частности, непонятно как обращаться к ConnectivityManager из Delphi. 

Ссылка на комментарий
  • 0
В 11.10.2021 в 23:36, Delpher-X сказал:

Поподробнее, пожалуйста. 

var

http: THttpClient;

pesp: IHttpResponse;



http := THttpClient.Create;
try

  resp := http.head(URL);
except

 on e: exception do

begin

   showmessage(e.message);

end;

end;

http.free;

 

Ссылка на комментарий
  • 0

function checkNetwork: Boolean;
function GetConnectivityManager: JConnectivityManager;
  var
    ConnectivityServiceNative: JObject;
  begin
    ConnectivityServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE);
    if not Assigned(ConnectivityServiceNative) then exit;

    Result := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID);
    if not Assigned(Result) then exit;
  end;
var
  cm: JConnectivityManager;
  activeNetwork: JNetworkInfo;
begin
try
  cm := GetConnectivityManager;
  activeNetwork := cm.getActiveNetworkInfo;
  Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected;
except
  Result := false;
end;
end;

Ссылка на комментарий
  • 0
В 16.10.2021 в 05:56, OnePeople сказал:

function checkNetwork: Boolean;
function GetConnectivityManager: JConnectivityManager;
  var
    ConnectivityServiceNative: JObject;
  begin
    ConnectivityServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE);
    if not Assigned(ConnectivityServiceNative) then exit;

    Result := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID);
    if not Assigned(Result) then exit;
  end;
var
  cm: JConnectivityManager;
  activeNetwork: JNetworkInfo;
begin
try
  cm := GetConnectivityManager;
  activeNetwork := cm.getActiveNetworkInfo;
  Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected;
except
  Result := false;
end;
end;

Это вы сейчас какую функцию описываете? Первую: function checkNetwork: Boolean; 

Или вторую: function GetConnectivityManager: JConnectivityManager;? 

 

Ссылка на комментарий
  • 0
В 13.10.2021 в 23:15, krapotkin сказал:
var

http: THttpClient;

pesp: IHttpResponse;



http := THttpClient.Create;
try

  resp := http.head(URL);
except

 on e: exception do

begin

   showmessage(e.message);

end;

end;

http.free;

Неплохо, но непонятно, как из этого кода извлечь сигнал "Интернет есть". Я тут вижу только возможность узнать только что Интернета нет. 

Ссылка на комментарий
  • 0
5 часов назад, Delpher-X сказал:

Это вы сейчас какую функцию описываете? Первую: function checkNetwork: Boolean; 

Или вторую: function GetConnectivityManager: JConnectivityManager;? 

??? Это одна функция checkNetwork возвращает есть интернет или нет

Ссылка на комментарий
  • 0
В 24.10.2021 в 06:13, OnePeople сказал:

??? Это одна функция checkNetwork возвращает есть интернет или нет

То есть, одна функция объявляется внутри другой? Я что-то запутался. 

Ссылка на комментарий
  • 0

 

В 27.10.2021 в 05:59, Delpher-X сказал:

То есть, одна функция объявляется внутри другой? Я что-то запутался. 

ну да, это не мое решение так разделить, написал на скорую для Вас

function checkNetwork: Boolean;
  var
    ConnectivityServiceNative: JObject;
    cm: JConnectivityManager;
    activeNetwork: JNetworkInfo;
begin
  try
    // подключаемся к сервису (в данном случае соединений)
    ConnectivityServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE);

    //  если не подключились то выход c результататом функции FALSE
    if not Assigned(ConnectivityServiceNative)
      then exit(false);
   
    // получаем менеджер соединений
    cm := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID);

    // если не получили то выход c результататом функции FALSE
    if not Assigned(Result) 
      then exit(false);

   // запрашиваем информацию о активном соединении
    activeNetwork := cm.getActiveNetworkInfo;

   // если есть информация и статус соединения подключено то результат функции TRUE
    Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected;
  except
   // при любой ошибке выход c результататом функции FALSE
    Exit(false);
  end;
end;

 

Изменено пользователем OnePeople
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...