我已经尝试了几天使用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)时,我在服务器中什么也得不到。
任何帮助将不胜感激。
答案 0 :(得分:0)
我有同样的问题然后我在服务中尝试IdHTTP。 我认为问题出在FMX.Helpers.Android中,因为它使用Activity。 IdComponent使用IdStack。 (第69行) IdStack使用FMX.Helpers.Android(第438行)
PS。德尔福RX西雅图