Delphi XE10西雅图Android从服务获取通知

Delphi XE10西雅图Android从服务获取通知,android,delphi,android-service,delphi-10-seattle,Android,Delphi,Android Service,Delphi 10 Seattle,我正在尝试使用本地服务创建一个应用程序,并以 但就我而言,我的服务在启动后不会发出通知(我也不能确定服务是否正在运行)。有没有办法确保我的服务正在运行?自从我尝试检查设备的系统-应用程序-运行时起甚至我的应用程序都没有列出。这就像我的应用程序在失去焦点/切换到其他应用程序后死机(或休眠) 下面是我的简单服务和通知代码 function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject; co

我正在尝试使用本地服务创建一个应用程序,并以

但就我而言,我的服务在启动后不会发出通知(我也不能确定服务是否正在运行)。有没有办法确保我的服务正在运行?自从我尝试检查设备的系统-应用程序-运行时起甚至我的应用程序都没有列出。这就像我的应用程序在失去焦点/切换到其他应用程序后死机(或休眠)

下面是我的简单服务和通知代码

    function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject;
      const Intent: JIntent; Flags, StartId: Integer): Integer;
    var TheNotif: TNotification;
    begin
      TheNotif := Notif.CreateNotification;
      try
        TheNotif.Title := 'Notif Title';
        TheNotif.Name := 'NotifServiceStart';
        TheNotif.AlertBody := 'I''m alive!!!!';
        TheNotif.FireDate := Now;
        Notif.PresentNotification(TheNotif);
      finally
        TheNotif.Free;
      end;
      Result := TJService.JavaClass.START_STICKY;
    end;
这是我的来电应用程序代码

    procedure TfmMain.FormCreate(Sender: TObject);
    var FServiceConn: TLocalServiceConnection;
    begin
      FServiceConn := TLocalServiceConnection.Create;
      FServiceConn.StartService('unMainServiceLocation');
      FServiceConn.BindService('unMainServiceLocation');
    end;

    procedure TfmMain.NotifReceiveLocalNotification(Sender: TObject;
      ANotification: TNotification);
    begin
      Text1.Text :=
        'Title : ' + ANotification.Title + #13#10 +
        'Name : ' + ANotification.Name + #13#10 +
        'Alert : ' + ANotification.AlertBody ;
    end;
我尝试在应用程序上放置一个按钮,并执行相同的操作(从应用程序发送通知),当我按下按钮时,我的Text1组件显示正确的内容,并且通知确实出现了,但在启动我的应用程序时没有出现(应该由服务启动)。服务名称假设是正确的,因为当我更改服务名称时,它被强制停止(分段错误11)


请给出建议。谢谢

将此行放入其他事件(如单击按钮)后,效果良好:

FServiceConn.StartService('unMainServiceLocation');
FServiceConn.BindService('unMainServiceLocation');

将此行放入其他事件(如单击按钮)后,效果良好:

FServiceConn.StartService('unMainServiceLocation');
FServiceConn.BindService('unMainServiceLocation');

变量的范围
var FServiceConn:TLocalServiceConnection仅限于
FormCreate
,这意味着它在
FormCreate
过程之外不可用。将变量放在表单的
private
部分。不要忘记在关闭/销毁表单时进行清理。

变量的范围
var FServiceConn:TLocalServiceConnection仅限于
FormCreate
,这意味着它在
FormCreate
过程之外不可用。将变量放在表单的
private
部分。关闭/销毁表单时不要忘记清理。

可能的副本