Android 6中使用Delphi XE8的TIdTCPClient和MessageDlg

时间:2016-05-02 19:32:32

标签: delphi message firemonkey tcpclient android-6.0-marshmallow

我在Delphi XE8的Android应用程序中尝试下一个代码;

function CheckInternet(idTCP: TIdTCPClient): boolean;
begin
      try
          idTCP.ReadTimeout := 4000;
          idTCP.ConnectTimeout := 4000;
          idTCP.Port := 80;
          idTCP.Host := 'google.com';
          idTCP.Connect;
          idTCP.Disconnect;
          result:=true;
      except
          result:=false;
      end;
end;

然后,如果互联网连接可用,我会检查主要表格;

if Not CheckInternet(IdTCPClient1) then
                MessageDlg('Internet connection not available', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbOK], 0,  procedure(const AResult: TModalResult) begin Application.Terminate; end);

在4.x和5.x等Android版本中运行良好,但在Android版本6.x中,程序退出时不显示任何消息,否则如果不检查互联网连接,则会显示消息。 拜托,有没有人知道这个问题?。

使用匿名线程也不起作用;

TThread.CreateAnonymousThread(procedure
         begin
             try
                IdTCPClient1.ReadTimeout := 4000;
                IdTCPClient1.ConnectTimeout := 4000;
                IdTCPClient1.Port := 80;
                IdTCPClient1.Host := 'google.com';
                IdTCPClient1.Connect;
                IdTCPClient1.Disconnect;
             except
                MessageDlg('Internet connection not available', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbOK], 0,
                        procedure(const AResult: TModalResult) begin TThread.CurrentThread.Free; Application.Terminate; end);
             end;

         end).Start;

更新了代码;

TThread.CreateAnonymousThread(procedure
         begin
                IdTCPClient1.ReadTimeout := 4000;
                IdTCPClient1.ConnectTimeout := 4000;
                IdTCPClient1.Port := 80;
                IdTCPClient1.Host := 'google.com';
                IdTCPClient1.Connect;
                IdTCPClient1.Disconnect;

                TThread.CurrentThread.OnTerminate := AnonymousThreadTerminate;

          end).Start;

procedure AnonymousThreadTerminate(Sender: TObject);
begin
        MessageDlg('Internet connection not available', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbOK], 0,  procedure(const AResult: TModalResult) begin Application.Terminate; end);
end;

非常感谢和问候。

0 个答案:

没有答案