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;