我开发了一个Android应用程序,其中有一个服务在后台工作,工作是发送有关当天所有集合点的通知。 在主要的应用程序onCreat甚至我创建了服务表单:
Application.CreateForm(TTservice, Tservice);
我创建了一个Tswitchbutton来启动服务并停止它:
if switchnotificationenable.IsChecked then
var
Fservice : TLocalServiceConnection;
begin
Fservice := TLocalServiceConnection.Create;
Fservice.StartService('TheService');
end;
和服务事件OnstartCommande中的另一个代码:
Result := TJService.JavaClass.START_REDELIVER_INTENT;
调试违规时Access指向代码:
Fservice.StartService('TheService');
错误通常意味着我正在调用的内容不存在我能够访问我服务表单上的计时器,所以我不知道会出现什么问题。
我希望你们能帮助我找到解决方案。
我正在使用带有sqlite数据库的Delphi XE10.2 tokyo,
每个人都过得愉快!更新
我发现当我从项目中删除服务的file.jar时,违规访问错误消失但服务无法启动。
----- ----- UPDATE 在发现我无法使用TTimer来创建我的推送通知之后,我正在考虑使用一个循环来实现iTask,如果系统时间等于主应用程序中给出的时间,则使用sleep函数检查每30秒用户
procedure TDM.AndroidServiceCreate(Sender: TObject);
var
ntf : Jnotification;
today : Ttime;
mynotification : Tnotification;
notiftime : TTime;
T : iTask;
TheINIFIle : string;
config : Tstringlist;
begin
// Loading the database path and the time given by the user in the main apps who are saved in A Ini file
TheINIFILE := TPath.Combine(TPath.GetSharedDocumentsPath ,'NotificationParams.ini');
if FileExists(TheINIFILE) then
begin
config := Tstringlist.Create;
config.loadfromfile(TheINIFILE);
notiftime := strtotime(config.Values['TimeNotification']);
TimerConnection.Database := config.Values['DatabasePath'];
TimerConnection.Connect;
// creating the iTask and giving it code that create notifications everytime the system time is equal to the notification time
if TimerCOnnection.Connected = true then
begin
T := TTask.Run(procedure
begin
while Checking = true do
begin
sleep(30000);
today := time;
with QueryForNotification do
begin
SQL.Clear;
SQL.Add('select client.entreprise, RDV.date_ntf, RDV.date_rdv, Client.num_C from client, Rdv where client.num_c = rdv.num_c and rdv.Date_Ntf = date(''now'')');
Open;
First;
while not eof do
if sametext(fieldvalues['date_ntf'], FormatDateTime('yyyy-mm-dd', now)) then
begin
MyNotification := TheNotifications.CreateNotification;
try
if sametext(formatdatetime('HH-MM',NotifTime),formatdatetime('HH-MM',today)) then
begin
MyNotification.AlertBody := 'Le RDV avec ' + FieldValues['entreprise'] + ' vous attend!' ;
TheNotifications.ScheduleNotification(MyNotification);
end;
finally
next;
MyNotification.DisposeOf;
end;
end;
end;
end;
end);
end;
end;
end;