2016-06-08 15 views
1

Я пытаюсь сделать приложение с местной службой, с примером изDelphi XE10 Seattle Android Получить уведомление от службы

http://docwiki.embarcadero.com/RADStudio/Seattle/en/Creating_Android_Services

Но в моем случае, моя служба просто не будет срабатывать уведомления после запуска (и я не могу быть уверен, что служба работает). Есть ли способ убедиться, что моя служба запущена? С тех пор, как я попытался проверить на устройстве System - Apps - Запуск даже моего приложения нет в списке. Это как мое приложение просто умер (или сон) после того, как он потерял фокус/переключатель в другое приложение

Ниже мой простой сервис & код уведомления

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)

Просьба дать консультацию. Благодаря

+1

Возможный дубликат [Как проверить, работает ли служба в Delphi 10 Seattle] (http://stackoverflow.com/questions/34262554/how-to-check-if-a-service-is-running-in -Delphi-10-сиэттл) – Machado

ответ

0

После надев эти строки в другом случае (например, нажатие кнопки), она отлично работает:

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

Объем вашей переменной var FServiceConn: TLocalServiceConnection; ограничивается FormCreate, то есть он не будет доступен за пределами FormCreate процедура. Поместите переменную вверх в раздел private формы. Не забудьте очистить при закрытии/разрушении формы.

Смежные вопросы