我正在尝试使用本地服务创建一个应用程序,其中有一个来自
的示例http://docwiki.embarcadero.com/RADStudio/Seattle/en/Creating_Android_Services
但在我的情况下,我的服务在启动后不会发出通知(也不能确定该服务正在运行)。有没有办法确保我的服务正在运行?从我试图检查设备的系统 - 应用程序 - 正在运行时,甚至我的应用程序都没有列出。这就像我的应用程序在失去焦点/切换到其他应用程序后死亡(或睡眠)
以下是我的简单服务&通知代码
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)
请提供建议。感谢
答案 0 :(得分:0)
将这些行放入其他事件(如点击按钮)后,它可以正常工作:
FServiceConn.StartService('unMainServiceLocation');
FServiceConn.BindService('unMainServiceLocation');
答案 1 :(得分:0)
变量var FServiceConn: TLocalServiceConnection;
的范围仅限于FormCreate
,这意味着它不会在FormCreate
程序之外提供。将变量放在表单的private
部分中。不要忘记清理关闭/破坏表格。