Перейти к содержанию
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;

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

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

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

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

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

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

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

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

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

  • Похожий контент

    • Автор Delpher-X
      Вопрос: как спрятать главную форму приложения в FMX? В VCL это делается просто - Project>View Source>вписываешь в открывшемся окне Application.ShowMainForm := False, однако в FMX такой фокус не прокатывает, там просто свойства такого нет - ShowMainForm. Как же быть? 
    • Автор Delpher-X
      Пытаюсь программно добавить в своем проекте компонент IdFTP: 
      FTPBot : TIdFTP; FTPBot := TIdFTP.Create(); FTPBot.Name := 'FTPGhost'; FTPBot.Passive := True; FTPBot.Host := ''; FTPBot.Username := ''; FTPBot.Password := ''; Код компилируется нормально. 
      Однако, когда я пытаюсь обратиться к свойству TransferType полученного объекта: 
      FTPBot.TransferType.ftBinary; Программа при компиляции вылетает с ошибкой, утверждает что нельзя так писать. В чем дело? 
    • Автор Delpher-X
      У меня такая проблема. Когда я делаю копию исходного проекта Delphi (Save Project As), то эта копия оказывается связана некой квантово-механической запутанностью, с оригиналом. И все изменения внесенные в одну копию проекта, автоматически оказываются внесены и в другую. Вопрос: как оторвать эти копии друг от друга? 
    • Автор Delpher-X
      Я обратил внимание, что если в VCL цвет формы, а также некоторых других компонентов можно менять, то в FMX это сделать нельзя - доступен только дефолтно-серый, во всяком случае, при компиляции под Android. Есть ли какие-то способы это поправить? 
    • Автор Delpher-X
      У меня есть следующий код, который передает данные из потока в объект типа TStrings: 
      var F : TMemoryStream; S : TStrings; begin F := TMemoryStream.Create; S := TStringList.Create; F.LoadFromFile('C:/File.jpg'); S.LoadFromStream(F); Из TMemoryStream в TStrings все передается нормально. Однако - как обратно? Как снова преобразовать объект TString в поток данных, дабы снова можно было бы сохранить его в полноценный файл? 
    • Автор Delpher-X
      Итак, я пробовал использовать компоненты AppTethering для передачи данных между VCL-приложением работающим под Windows и мобильным FMX-приложением и потерпел неудачу, так как выяснилось что потоки данных данные компоненты на деле не передают. И у меня возник вопрос: а нет ли каких других компонентов в современной Embarcadero Studio, которые бы позволяли передавать как строковые данные, так и файлы между приложениями? Особенно меня интересуют все же файлы. 
    • Автор Delpher-X
      Доброе время суток. У меня есть код, который отправляет данные, в частности файлы, из одного приложения в другое, используя технологию AppTethering. Вот код, который отправляет данные: 
      var ImageToStream : TMemoryStream; begin ImageToStream := TMemoryStream.Create; ImageToStream.LoadFromFile('Здесь находится путь к файлу'); ImageToStream.Position := 0; TetheringAppProfile1.Resources.FindByName('ImageTransfer').Value := ImageToStream; ImageToStream.Free; end; А вот который принимает: 
      procedure TForm1.TetheringAppProfile1Resources3ResourceReceived( const Sender: TObject; const AResource: TRemoteResource); var GetImage : TMemoryStream; begin GetImage := TMemoryStream.Create; GetImage.Position := 0; GetImage.LoadFromStream(AResource.Value.AsStream); ImageViewer1.Bitmap.LoadFromStream(GetImage); GetImage.Free; end; Пока передача данных идет между двумя Windows-приложениями, все работает прекрасно. Однако, когда я пытаюсь отправить данные от Windows-приложения в Android-приложение, которое исполняется на смартфоне, подключенном к компьютеру через USB-шнур, данные не проходят.  
    • Автор Delpher-X
      У меня есть код, который должен скачивать файл с сайта: 
      var LoadFile : TMemoryStream; begin LoadFile := TMemoryStream.Create; IdHTTP1.Get('https://sitename.pro/Folder/FileName.txt', LoadFile); LoadFile.SaveToFile('FileName.txt'); LoadFile.Free; end; Проблема однако в том, что вместо скачивания файла программа выдает: Could not load SSL library, хотя я никакой "SSL library" не просил)). При этом, когда я попробовал скачать файл с сайта работающего по старинке, на http (в отличие от https), все скачалось нормально, то есть проблема явно в данном протоколе. Поиск по Интернету ничего не дал.  
    • Автор Anatoliy_
      Приветствую
      Подскажите, планируется ли в RAD Studio возможность компиляции Delphi программ  для WebAssembly?
       
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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