본문 바로가기

Delphi/꿀팁

안드로이드 서비스에 접근하기

2019/11/05 - [Delphi/꿀Tip] - 안드로이드 어플에 서비스 추가하기


안드로이드 서비스 프로젝트를 생성합니다.

프로젝트 명은 AndroidService(중요☆ 앞에 lib는 자동으로 붙습니다)

유닛명은 uAndroidService로 했습니다.


안드로이드 서비스에 AndroidServiceStartCommand 이벤트와 

여기선 주고받을 값을 저장할 MyValue를 프로퍼티로 생성했습니다.

type TMyServiceDM = class(TAndroidService) function AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; private FMyValue: string; procedure SetMyValue(const Value: string); { Private declarations } public { Public declarations } property MyValue: string read FMyValue write SetMyValue; end;

function TMyServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin Result := TJService.JavaClass.START_STICKY; end;

안드로이드 메인 프로젝트를 생성하고 서비스를 추가합니다.


Uses절에 추가한 서비스 유닛과 System.Android.Service를 추가해줍니다.

uses

.., System.Android.Service, uAndroidService;

안드로이드 메인에 FormCreate 이벤트와 버튼을 올려놓고

서비스 연결에 필요한 변수들을 선언합니다.

type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } FMyServiceConn : TLocalServiceConnection; [Unsafe] FMyServiceDM : TMyServiceDM; procedure ServiceConnected(const ALocalService: TAndroidBaseService); public { Public declarations } end;

procedure TForm1.ServiceConnected(const ALocalService: TAndroidBaseService); begin

//LocalServiceConnection의 OnConnected 이벤트에서 받아온 서비스를 할당 FMyServiceDM := TMyServiceDM(ALocalService); end;

FormCreate에서 서비스를 연결합니다.

procedure TForm1.FormCreate(Sender: TObject); begin FMyServiceConn := TLocalServiceConnection.Create;

FMyServiceConn.OnConnected := ServiceConnected; //핵심 이벤트 FMyServiceConn.BindService('AndroidService'); //서비스 프로젝트를 생성할 때 입력했던 프로젝트명을 입력합니다. end;

ButtonClick 이벤트에서 값을 주고 받는지 확인합니다.

procedure TForm1.Button1Click(Sender: TObject); begin FMyServiceDM.MyValue := 'A'; ShowMessage(FMyServiceDM.MyValue); end;


반응형