• 0
Sashar333

Простая проверка подключения к интернету перед выполнением IdHTTP1.get

Вопрос

Здравствуйте!

Подскажите пожалуйста как делается самая простая проверка подключения телефона на android к интернету, перед выполнением функции IdHTTP1.get ?

Без этого приложение "вылетает".

В программе требует просто пропустить выполнение этой функции, если нет интернета.

Заранее спасибо! 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

21 ответ на этот вопрос

  • 0

На эту тему топиков уже пачка открыта.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
9 часов назад, Sashar333 сказал:

Здравствуйте!

Подскажите пожалуйста как делается самая простая проверка подключения телефона на android к интернету, перед выполнением функции IdHTTP1.get ?

Без этого приложение "вылетает".

В программе требует просто пропустить выполнение этой функции, если нет интернета.

Заранее спасибо! 

 

Не должно вылетать, даже если Инета нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Спасибо. Но этим методом у меня не получается. Delphi ругается на множество операторов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
6 часов назад, Sashar333 сказал:

Спасибо. Но этим методом у меня не получается. Delphi ругается на множество операторов.

каким именно методом? Здесь не Ванг. Уточняйте! И под андроид не рекомендуется использовать indy! Пользуйтесь netHttp

Andrey Efimov понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вот этот метод :  http://delphifmandroid.blogspot.ru/2013/12/delphi-xe5.html сложный для меня.

А по поводу этого: https://github.com/AndrewEfimov/Android-API/tree/master/ActiveNetworkInfo

выдает ошибку: [DCC Error] ActiveNetworkInfo.Android.pas(52): E2003 Undeclared identifier: 'TAndroidHelper'

591e91870f5cb_.thumb.JPG.3bb19a647a912b8fd5e3bd01b59f2bd0.JPG

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

В след. раз сообщайте версию IDE и уровень ваших навыков программирования.

Второй вариант подходит для IDE Berlin/Tokyo (10.1.*/10.2.* соответственно), там внутри файла об этом написано...

Вы используете XE8, скорее всего подойдёт 1 вариант, но опять же может потребоваться переименовать какой-то модуль или ещё что-то. Подключается он так же, кидаете файлы в папку с проектом и прописываете в uses.

А вообще, рекомендую перейти на "Delphi Berlin 10.1 Update 2" - наиболее стабильная версия IDE (начиная с версии XE5).

Sashar333 понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

а вообще нужно обрабатывать ошибки, чтобы из за одной ошибки не вылетало всё приложение

заодно по ошибке и узнаете, что связи нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, Andrey Efimov сказал:

В след. раз сообщайте версию IDE и уровень ваших навыков программирования.

Второй вариант подходит для IDE Berlin/Tokyo (10.1.*/10.2.* соответственно), там внутри файла об этом написано...

Вы используете XE8, скорее всего подойдёт 1 вариант, но опять же может потребоваться переименовать какой-то модуль или ещё что-то. Подключается он так же, кидаете файлы в папку с проектом и прописываете в uses.

А вообще, рекомендую перейти на "Delphi Berlin 10.1 Update 2" - наиболее стабильная версия IDE (начиная с версии XE5).

Спасибо, перехожу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 часа назад, Sashar333 сказал:

Спасибо, перехожу...

... Перешел на "Delphi Berlin 10.1 Update 2"

но видимо со вторым вариантом тоже у меня не получится...

... Добавил все PASы в папку для всех USESов которые требовал "Delphi Berlin 10.1 Update 2"

теперь пишет ошибку:

 591ef118651b5_.thumb.JPG.4c30731f14e924f7a9e215c2ba02a106.JPG

может кто еще подскажет или покажет простейшую проверку подключения к интернету на Android(желательно чтобы работало под все платформы)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Привет. Я использую самый так. Более стабильная.

function checkNetwork: Boolean;
var
  TCP: TIdTCPClient;
begin
  Application.ProcessMessages;
  TCP := TIdTCPClient.Create(nil);
  try
    TCP.ReadTimeout := 2000;
    TCP.ConnectTimeout := 2000;
    TCP.Port := 80;
    TCP.Host := 'google.com';
    TCP.Connect;
    TCP.Disconnect;
    Result := True;
  except
    Result := False;
    TCP.Free;
  end;
end;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Ну, не знаю где вы накосячили, но я сегодня как раз добавлял свой класс в проект и всё отлично работает...

В 19.05.2017 в 16:22, Sashar333 сказал:

... Добавил все PASы в папку для всех USESов которые требовал "Delphi Berlin 10.1 Update 2"

Что значит все Pasы?

Если второй вариант у вас, это https://github.com/AndrewEfimov/Android-API/tree/master/ActiveNetworkInfo, то нужно:

  • положить файл ActiveNetworkInfo.Android.pas в папку вашего проекта
  • подключить этот файл в Uses вашего проекта
  • Добавить разрешение в Uses Permissions: ACCESS_NETWORK_STATE
  • использовать в коде проекта - TActiveNetworkInfo.метод (например, TActiveNetworkInfo.IsConnected)

 

p.s. Использую Delphi Berlin 10.1 Update 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
25 минут назад, Andrey Efimov сказал:

Ну, не знаю где вы накосячили, но я сегодня как раз добавлял свой класс в проект и всё отлично работает...

Что значит все Pasы?

Если второй вариант у вас, это https://github.com/AndrewEfimov/Android-API/tree/master/ActiveNetworkInfo, то нужно:

  • положить файл ActiveNetworkInfo.Android.pas в папку вашего проекта
  • подключить этот файл в Uses вашего проекта
  • использовать в коде проекта - TActiveNetworkInfo.метод (например, TActiveNetworkInfo.IsConnected)

 

p.s. Использую Delphi Berlin 10.1 Update 2

После "положить файл ActiveNetworkInfo.Android.pas в папку вашего проекта" и подключение в Uses начинает ругаться на нехват Androiapi. и Posix. , наверно не настроен Delphi?, по этому все эти PASы добавил в папку.

Далее начинает ругаться на Posix.StdDef.size_t; и Psize_t = Posix.StdDef.Psize_t;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

 

1 час назад, Sashar333 сказал:

... Перешел на "Delphi Berlin 10.1 Update 2"

но видимо со вторым вариантом тоже у меня не получится...

... Добавил все PASы в папку для всех USESов которые требовал "Delphi Berlin 10.1 Update 2"

теперь пишет ошибку:

В правой панели выберите платформу Android, а не Windows.

Изменено пользователем ENERGY
Andrey Efimov и Sashar333 понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
9 минут назад, ENERGY сказал:

 

В правой панели выберите платформу Android, а не Windows.

Спасибо заработало!

Я почему то решил что это и под WINDOWS тоже сработает, но видимо нет.

Правда пришлось еще файлы кое какие добавлять в папку проекта

Может заодно подскажете:

1) где в настройках DELPHI прописать пути для проекта к файлам, допустим которые находятся здесь:

C:\Program Files (x86)\Embarcadero\Studio\18.0\source\rtl

Чтобы не копировать их в папку проекта

2) apk файл после выполнения компиляции второго варианта ( https://github.com/AndrewEfimov/Android-API/tree/master/ActiveNetworkInfo ) занимает более 7мб

 это нормально?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, AliZairov сказал:

Привет. Я использую самый так. Более стабильная.


function checkNetwork: Boolean;
var
  TCP: TIdTCPClient;
begin
  Application.ProcessMessages;
  TCP := TIdTCPClient.Create(nil);
  try
    TCP.ReadTimeout := 2000;
    TCP.ConnectTimeout := 2000;
    TCP.Port := 80;
    TCP.Host := 'google.com';
    TCP.Connect;
    TCP.Disconnect;
    Result := True;
  except
    Result := False;
    TCP.Free;
  end;
end;

 

Этот вариант у меня почему то работает только в WINDOWS, на смартфоне приложение вылетает

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
52 минуты назад, Sashar333 сказал:

Этот вариант у меня почему то работает только в WINDOWS, на смартфоне приложение вылетает

Да, я использую его для win и mac. Я использую его для Android.

function checkNetwork: Boolean;
function GetConnectivityManager: JConnectivityManager;
  var
    ConnectivityServiceNative: JObject;
  begin
    ConnectivityServiceNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE);
    if not Assigned(ConnectivityServiceNative) then
      raise Exception.Create('Could not locate Connectivity Service');
    Result := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID);
    if not Assigned(Result) then
      raise Exception.Create('Could not access Connectivity Manager');
  end;
var
  cm: JConnectivityManager;
  activeNetwork: JNetworkInfo;
begin
  cm := GetConnectivityManager;
  activeNetwork := cm.getActiveNetworkInfo;
  Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected;
end;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
6 часов назад, Sashar333 сказал:

Может заодно подскажете:

1) где в настройках DELPHI прописать пути для проекта к файлам, допустим которые находятся здесь:

C:\Program Files (x86)\Embarcadero\Studio\18.0\source\rtl

Чтобы не копировать их в папку проекта

2) apk файл после выполнения компиляции второго варианта ( https://github.com/AndrewEfimov/Android-API/tree/master/ActiveNetworkInfo ) занимает более 7мб

 это нормально?

На форуме есть правило: Один вопрос - одна тема.

По первому вопросу создайте отдельно тему, а по второму - уже обсуждалось, воспользуйтесь поиском (Поиск: "Размер приложения")

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
Цитата

1) где в настройках DELPHI прописать пути для проекта к файлам, допустим которые находятся здесь:

Эти файлы автоматом подхватываются, в зависимости от выбранной платформы, к зтой папке не надо ничего прописывать и не нужно их копировать в папку с проектом.

По поводу второго вопроса ссылку вам уже дали.

 

А поводу универсального варианта, для всех платформ, аналогичный варианту, который предложил @AliZairov, блин ну вы бы хоть зашли в указанный мною выше топик.

 

uses System.Net.HttpClient

function CheckInternet: boolean;
begin
  Result := false;
  with THTTPClient.Create do
  try
    try
      Result := Head('http://google.com').StatusCode < 400;
    except
    end;
  finally
    Free;
  end;
end;  

 

Но этот метод работает в несколько раз медленнее, чем вариант для андроида (~200-500 ms, Android метод около 30-50 ms.)

Да кстати  AliZairov в вашем примере утечка памяти (memory leak) - класс уничтожается только в except блоке.

Изменено пользователем ENERGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Все понятно, всем спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

  • Похожие публикации

    • Автор: long_island
      Всем привет. Перерыл тонну информации, но так и не нашел инфы по интересующему меня вопросу.
      Задача: Обычным запросом(INDY, synapse, не имеет значения) проверить наличие SSL сертификата у сайта, в общем - то подойдет и просто проверка на то, что сертификат не самоподписанный. Но так же имеется конкретный сертификат конкретного сайта(https).
      Заранее благодарен за любую помощь в данном вопросе.
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу