PDA

Ver la Versión Completa : Servicio en android.


voci
28-05-2016, 18:50:26
He Creado un sencillo servicio para que lance una notificación cada 2 minutos, el servicio funciona perfectamente, lanza las notificaciones como debe hacer, el problema es que cuando cierro la aplicación, aunque android indica que el servicio sigue funcionando, ya no lanza las notificaciones hasta que vuelvo a abrir la aplicación.

¿Es así como funcionan los servicos de android?, ¿hay algo que se me escapa?.

Saludos.

Neftali [Germán.Estévez]
30-05-2016, 10:03:01
Hay varios tipos de servicios que puedes definir. El componrtamiento puede variar según el tipo. Revisa que hayas creado el que se ajusta a tus necesidades.

Más info (http://docwiki.embarcadero.com/RADStudio/Seattle/en/Android_Service).

voci
30-05-2016, 21:00:17
Gracias Neftali por contestar una vez más, siempre al pie del cañón.

A raíz de tu respuesta he estado mirando y he visto esto por internet "Android services allow for execution even when app is not running", pero con mi limitado inglés no veo claro como conseguirlo

Supongo que te refieres a crear un servicio remoto, voy a ver si consigo entender algo ya que todo lo que veo sobre este tema está en inglés, y como digo no es precisamente mi fuerte.

Saludos.

voci
30-05-2016, 21:45:50
Esto dice la documentación de Embarcadero:

Starting a Service

Services can be started with ALocalServiceConnection.StartService('<service_name>') and ALocalServiceConnection.BindService('<service_name>'), or ARemoteServiceConnection.StartService('<service_name>') and ARemoteServiceConnection.BindService('<service_name>').

Pero RemoteServiceConnection no tiene el procedimiento StartService, yo al menos no lo veo.

Saludos.

Neftali [Germán.Estévez]
30-05-2016, 22:43:52
Revisa esta pagina que explica algo mas:

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

Sobre todo la parte que habla de "started service".

A started service: This service is started by an Android application. The service can run in the background indefinitely, even if the application is closed. This type of service usually performs a single task and automatically stops after finishing.

voci
31-05-2016, 00:05:56
Gracias de nuevo Neftali, ya he estado leyendo la información de embarcadero, este es el sencillo código que utilizo para iniciar el servicio en modo local:


unit Unit1;

interface

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.fmx}

uses
System.Android.Service;


procedure TForm1.FormCreate(Sender: TObject);
begin
TLocalServiceConnection.StartService('MiServicio');
end;



end.



El problema que encuentro es que entiendo que para iniciar el servicio en modo remoto solo sería cambiar la secuencia de modo de inicio.


procedure TForm1.FormCreate(Sender: TObject);
begin
TRemoteServiceConnection.StartService('MiServicio');
end;


Pero TRemoteServiceConnection no encuentra el procedimiento StartService.

Saludos.

Neftali [Germán.Estévez]
31-05-2016, 09:54:23
Parece que también hay diferencias en el fichero Manifest de Android:


<service android:exported="true" android:name="com.embarcadero.services.<service_name>"/>


En lo que se refiere a la parte exported.

voci
31-05-2016, 12:26:35
Es cierto, lo había leido pero no había pensado en ello. Lo miraré y ya te cuento.

Saludos.

voci
03-06-2016, 16:42:45
Al final he conseguido ejecutar el servicio de forma independiente a la aplicación, el servicio se denomina intentlocalservice, viene muy bien explicado en el ejemplo de embarcadero llamado DownloadServiceDemo.

Saludos.