Добрый день. допустим я хочу следить в сервисе что мне вернет http запрос, возможно выполнить математические/логические операции, и в случае чего выдать уведомление.
как мне правильно организовать это? когда приложение работает то все ок. как только приложение закрывается - уведомления перестают идти. хотя сервис продолжает работать. почему после запуска потока дебагер остается в бесконечном потоке и нет брекпоинта на Result?????? после рестарта ОС, сервис стартовавший автоматически - не выводит никаких сообщений вообще....
unit Unit1;
interface
uses
System.SysUtils,
System.Classes,
System.Android.Service,
AndroidApi.JNI.GraphicsContentViewText,
Androidapi.JNI.Os, System.Notification;
/////////////////////////////////////////////////////////////
// Основной поток Execute
type
TExecuteThread = class(TThread)
private
protected
procedure Execute; override;
public
end;
// Основной поток Execute
/////////////////////////////////////////////////////////////
type
TAndroidServiceDM = class(TAndroidService)
NotificationCenter1: TNotificationCenter;
function AndroidServiceStartCommand(const Sender: TObject;
const Intent: JIntent; Flags, StartId: Integer): Integer;
private
{ Private declarations }
procedure LaunchNotification(title,body:string);
public
{ Public declarations }
end;
var
AndroidServiceDM: TAndroidServiceDM;
implementation
{%CLASSGROUP 'FMX.Controls.TControl'}
{$R *.dfm}
uses
Androidapi.JNI.App, System.DateUtils;
procedure TAndroidServiceDM.LaunchNotification(title,body:string);
var
MyNotification: TNotification;
begin
MyNotification := NotificationCenter1.CreateNotification;
try
MyNotification.Name := 'PanelControl';
MyNotification.Title := title;
MyNotification.AlertBody := body;
MyNotification.FireDate := IncSecond(Now, 0);
NotificationCenter1.ScheduleNotification(MyNotification);
except
MyNotification.Free;
end;
end;
procedure TExecuteThread.Execute;
begin
{ Place thread code here }
while true do begin
Unit1.AndroidServiceDM.LaunchNotification('Запуск','Успешная работа сервиса');
sleep(1000);
end;
end;
function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject;
const Intent: JIntent; Flags, StartId: Integer): Integer;
var
MyExecuteThread: TExecuteThread;
begin
MyExecuteThread:=TExecuteThread.Create(false);
MyExecuteThread.FreeOnTerminate:=true;
MyExecuteThread.Resume;
Result := TJService.JavaClass.START_STICKY;
end;
end.
Вопрос
fsdb
Добрый день. допустим я хочу следить в сервисе что мне вернет http запрос, возможно выполнить математические/логические операции, и в случае чего выдать уведомление.
как мне правильно организовать это? когда приложение работает то все ок. как только приложение закрывается - уведомления перестают идти. хотя сервис продолжает работать. почему после запуска потока дебагер остается в бесконечном потоке и нет брекпоинта на Result?????? после рестарта ОС, сервис стартовавший автоматически - не выводит никаких сообщений вообще....
unit Unit1; interface uses System.SysUtils, System.Classes, System.Android.Service, AndroidApi.JNI.GraphicsContentViewText, Androidapi.JNI.Os, System.Notification; ///////////////////////////////////////////////////////////// // Основной поток Execute type TExecuteThread = class(TThread) private protected procedure Execute; override; public end; // Основной поток Execute ///////////////////////////////////////////////////////////// type TAndroidServiceDM = class(TAndroidService) NotificationCenter1: TNotificationCenter; function AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; private { Private declarations } procedure LaunchNotification(title,body:string); public { Public declarations } end; var AndroidServiceDM: TAndroidServiceDM; implementation {%CLASSGROUP 'FMX.Controls.TControl'} {$R *.dfm} uses Androidapi.JNI.App, System.DateUtils; procedure TAndroidServiceDM.LaunchNotification(title,body:string); var MyNotification: TNotification; begin MyNotification := NotificationCenter1.CreateNotification; try MyNotification.Name := 'PanelControl'; MyNotification.Title := title; MyNotification.AlertBody := body; MyNotification.FireDate := IncSecond(Now, 0); NotificationCenter1.ScheduleNotification(MyNotification); except MyNotification.Free; end; end; procedure TExecuteThread.Execute; begin { Place thread code here } while true do begin Unit1.AndroidServiceDM.LaunchNotification('Запуск','Успешная работа сервиса'); sleep(1000); end; end; function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; var MyExecuteThread: TExecuteThread; begin MyExecuteThread:=TExecuteThread.Create(false); MyExecuteThread.FreeOnTerminate:=true; MyExecuteThread.Resume; Result := TJService.JavaClass.START_STICKY; end; end.
Ссылка на комментарий
10 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.