Мне удается получить разрешение во время выполнения для READ_PHONE_STATE, но приложение вообще не реагирует на изменения состояния телефона. Я также включил файл манифеста READ_PHONE_STATE.
Пробовал с 3 Android телефонами, но все не в состоянии отследить изменения состояния.
С iOS мне удается заставить READ_PHONE_STATE работать с тем же кодом как я пытался с Android, но в iOS Apple устарела, показывая номер телефона вызывающего абонента.
uses
System.Permissions;
{$R *.fmx}
constructor TForm1.Create(AOwner: TComponent);
const
PermissionAccessReadPhoneState = 'android.permission.READ_PHONE_STATE';
PermissionAccessMakeCall = 'android.permission.CALL_PHONE';
begin
inherited Create(AOwner);
TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService));
PermissionsService.RequestPermissions([PermissionAccessMakeCall, PermissionAccessReadPhoneState],
procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TpermissionStatus>)
begin
if (Length(AgrantResults) = 2) and (AgrantResults[0] = TPermissionStatus.Granted) and (AgrantResults[1] = TPermissionStatus.Granted) then
begin
ShowMessage('READ_PHONE_STATE + CALL_PHONE Activated!');
end;
end);
if Assigned(PhoneDialerService) then
begin
PhoneDialerService.OnCallStateChanged := MyOnCallStateChanged;
end;
end;
procedure TForm1.MyOnCallStateChanged(const ACallID: String;
const ACallState: TCallState);
var
outText: String;
begin
case ACallState of
TCallState.None: outText := 'No calls';
TCallState.Connected: outText := 'Connected';
TCallState.Incoming: outText := 'Incoming Call';
TCallState.Dialing: outText := 'Dialing';
TCallState.Disconnected: outText := 'Disconnected';
end;
lblCallState.Text := outText;
end;