2016-06-08 1 views
1

Je suis en train de faire une demande avec un service local, avec un exemple deDelphi XE10 Seattle Android Télécharger la notification du service

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

Mais dans mon cas, mon service juste ne se déclenche pas une notification après avoir commencé (et je ne peux pas être sûr que le service est en cours d'exécution). Est-il possible de s'assurer que mon service fonctionne? Depuis quand j'ai essayé de vérifier Système de l'appareil - Apps - Running même mon application ne figure pas. Il est comme mon application vient de mourir (ou le sommeil) après avoir perdu focus/commutateur à d'autres applications

Ci-dessous mon service simple & de code de notification

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; 

et voici mon code de l'application de l'appelant

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; 

J'ai essayé de mettre un bouton sur l'application et faire la même chose (envoyer une notification de l'application) et quand j'ai appuyé sur le bouton, mon composant Text1 montre la bonne chose, et la notification apparaît, mais pas au démarrage. a été commencé par le service). Nom du service supposé être juste depuis quand je change le nom du service il a été forcé à l'arrêt (erreur de segmentation 11)

S'il vous plaît veuillez donner des conseils. Merci

+1

Copie possible de [Comment vérifier si un service fonctionne dans Delphi 10 Seattle] (http://stackoverflow.com/questions/34262554/how-to-check-if-a-service-is-running-in -delphi-10-seattle) – Machado

Répondre

0

Après avoir mis ces lignes dans d'autres cas (comme un bouton clic), il fonctionne très bien:

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

La portée de votre var FServiceConn: TLocalServiceConnection; variable est limitée à FormCreate, ce qui signifie qu'il ne sera pas disponible en dehors de la FormCreate procédure. Placez la variable dans la section private du formulaire. Ne pas oublier de nettoyer à la fermeture/destruction du formulaire.