Delphi中的Android服务

时间:2016-01-05 18:15:36

标签: android delphi service

我已经尝试了几天使用Delphi Seattle编写Android服务,但每次App崩溃并停止响应。我的服务需要使用UDP连接向服务器发送消息。

这是我写的一个简单例子。

主机应用

unit Unit3;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls, System.Android.Service;

type
  TForm3 = class(TForm)
    Start: TButton;
    procedure StartClick(Sender: TObject);
  private
    { Private declarations }
    ConexaoServico : TLocalServiceConnection;
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.fmx}

procedure TForm3.StartClick(Sender: TObject);
begin
  ConexaoServico := TLocalServiceConnection.Create;
  ConexaoServico.StartService('Servicoteste');
end;

end.

服务

unit AndroidServicoteste;

interface

uses
  System.SysUtils,
  System.Classes,
  System.Android.Service,
  AndroidApi.JNI.GraphicsContentViewText,
  Androidapi.JNI.Os, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient;

type
  TAndroidServiceDM = class(TAndroidService)
    IdUDPClient1: TIdUDPClient;
    function AndroidServiceStartCommand(const Sender: TObject;
      const Intent: JIntent; Flags, StartId: Integer): Integer;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  AndroidServiceDM: TAndroidServiceDM;

implementation

{%CLASSGROUP 'FMX.Controls.TControl'}

{$R *.dfm}
uses
  Androidapi.JNI.App;

function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject;
  const Intent: JIntent; Flags, StartId: Integer): Integer;
begin

  IdUDPClient1.Connect;
  IdUDPClient1.Send('Teste', nil);
  IdUDPClient1.Host:= '192.168.1.109';
  IdUDPClient1.Port:= 45001;
  Result:= TJService.JavaClass.START_STICKY;
end;

end.

当我按下Start(TButton)时,我在服务器中什么也得不到。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我有同样的问题然后我在服务中尝试IdHTTP。 我认为问题出在FMX.Helpers.Android中,因为它使用Activity。 IdComponent使用IdStack。 (第69行) IdStack使用FMX.Helpers.Android(第438行)

PS。德尔福RX西雅图