자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey [시애틀]비콘을 안드로이드 서비스로 감지하는데 자꾸 응답없음으로 강제종료됩니다.
2016.06.09 16:22
델파이 시애틀로 안드로이드 서비스를 가동하여 TBeacon컴포넌트로 비콘에 근접시 TNotificationCenter로 알림을 넣는 예제를 만들고 있습니다.
그런데 처음 근접시 TNotificationCenter로 알림이 잘 갑니다. 하지만 신호 감지거리(약 10m)를 벗어난후 다시 근접하면 서비스가 응답없는지 메인 엑티비티및 서비스가 강제 종료됩니다. 강제 종료후 서비스가 다시 시작되기는 하지만 사용상 강제 종료는 피하고 싶습니다. 비콘감지가 서비스로 작동시 응답없음 상태로 들어가는 원인을 모르겠습니다. 서비스로 작동하지 않고 폼에 TBeacon을 올린후 타이머로 주기적으로 거리값을 감지했을때는 문제 없이 잘 작동하는데 이상합니다.
아래는 안드로이드 서비스에서 사용한 소스와 비콘 설정값입니다.
TBeacon설정
BeaconDeathTime: 10
CalcMode : Stabilized
Enable : False //서비스 시작시 소스에서 True로 변경함
LiveBindings Designer: +를 눌러 확장하면 Access violation...'dclbindcomp230.bpl'에러(정품사용자인데 에러납니다.)
Mode: Standard
Name: Beacon1
ScanningSleepingTime: 2000
ScanningTime : 500
SPC: 0.5
Tag: 0
//TNotificationCenter로 알림을 넣는 함수
procedure TAndroidServiceDM.SetNoti(Name, Title, MSG: String);
var
MyNotification: TNotification;
begin
MyNotification := NotificationCenter1.CreateNotification;
try
MyNotification.Name := Name;
MyNotification.Title := Title;
MyNotification.AlertBody := MSG;
// MyNotification.FireDate := IncSecond(Now, 8);
NotificationCenter1.ScheduleNotification(MyNotification);
finally
MyNotification.Free;
end;
end;
//서비스 시작
function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject;
const Intent: JIntent; Flags, StartId: Integer): Integer;
begin
Beacon1.Enabled := True;
SetNoti('ServiceNoti','비콘감지 서비스','비콘감지 시작');//서비스 시작을 알리기위함
Result := TJService.JavaClass.START_STICKY;
end;
//근접값이 변경되었을때 근접했으면 TNotificationCenter로 알림
procedure TAndroidServiceDM.Beacon1BeaconProximity(const Sender: TObject;
const ABeacon: IBeacon; Proximity: TBeaconProximity);
begin
if (Proximity = TBeaconProximity.Immediate) then
begin
SetNoti('ServiceNoti1','비콘감지 서비스','근접');
end;
end;
댓글 2
Firemonkey [시애틀]비콘을 안드로이드 서비스로 감지하는데 자꾸 응답없음으로 강제종료됩니다.
2016.06.09 16:22
델파이 시애틀로 안드로이드 서비스를 가동하여 TBeacon컴포넌트로 비콘에 근접시 TNotificationCenter로 알림을 넣는 예제를 만들고 있습니다.
그런데 처음 근접시 TNotificationCenter로 알림이 잘 갑니다. 하지만 신호 감지거리(약 10m)를 벗어난후 다시 근접하면 서비스가 응답없는지 메인 엑티비티및 서비스가 강제 종료됩니다. 강제 종료후 서비스가 다시 시작되기는 하지만 사용상 강제 종료는 피하고 싶습니다. 비콘감지가 서비스로 작동시 응답없음 상태로 들어가는 원인을 모르겠습니다. 서비스로 작동하지 않고 폼에 TBeacon을 올린후 타이머로 주기적으로 거리값을 감지했을때는 문제 없이 잘 작동하는데 이상합니다.
아래는 안드로이드 서비스에서 사용한 소스와 비콘 설정값입니다.
TBeacon설정
BeaconDeathTime: 10
CalcMode : Stabilized
Enable : False //서비스 시작시 소스에서 True로 변경함
LiveBindings Designer: +를 눌러 확장하면 Access violation...'dclbindcomp230.bpl'에러(정품사용자인데 에러납니다.)
Mode: Standard
Name: Beacon1
ScanningSleepingTime: 2000
ScanningTime : 500
SPC: 0.5
Tag: 0
//TNotificationCenter로 알림을 넣는 함수
procedure TAndroidServiceDM.SetNoti(Name, Title, MSG: String);
var
MyNotification: TNotification;
begin
MyNotification := NotificationCenter1.CreateNotification;
try
MyNotification.Name := Name;
MyNotification.Title := Title;
MyNotification.AlertBody := MSG;
// MyNotification.FireDate := IncSecond(Now, 8);
NotificationCenter1.ScheduleNotification(MyNotification);
finally
MyNotification.Free;
end;
end;
//서비스 시작
function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject;
const Intent: JIntent; Flags, StartId: Integer): Integer;
begin
Beacon1.Enabled := True;
SetNoti('ServiceNoti','비콘감지 서비스','비콘감지 시작');//서비스 시작을 알리기위함
Result := TJService.JavaClass.START_STICKY;
end;
//근접값이 변경되었을때 근접했으면 TNotificationCenter로 알림
procedure TAndroidServiceDM.Beacon1BeaconProximity(const Sender: TObject;
const ABeacon: IBeacon; Proximity: TBeaconProximity);
begin
if (Proximity = TBeaconProximity.Immediate) then
begin
SetNoti('ServiceNoti1','비콘감지 서비스','근접');
end;
end;
C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\AndroidBeaconServiceDemo 폴데에 있는 데모를 먼저 한번 돌려 보시기 바랍니다. 같은 결과가 나오는지 한 번 더 알려주시기 바랍니다.