I manage to get runtime permission for READ_PHONE_STATE but app doesn't react to phone state changes at all. I have also in manifest file READ_PHONE_STATE enabled.
Have tried with 3 Android phones but all fail to track state changes.
With iOS i manage to get READ_PHONE_STATE working with same code as i have tried with Android, but in iOS Apple has deprecated showing caller phone number.
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;