Skip to content

Delphi Android phone call

Muchos son los tipos de aplicaciones para dispositivos móviles que hay en el mercado, y sobre todo las que vendrán.

Uno de los desafíos que tuve hace poco, es que un cliente me pedía que desde su App, el usuario pudiera realizar una llamada a su empresa, realizar un Phone Call.

En primera instancia, doy con que para realizar un Phone Call, se necesita el permiso CALL_PHONE, es un permiso peligroso (ya que puede generar gastos realizando llamadas) por ende, se necesita el permiso explícito del usuario de la Applicación. (Te enseñamos como solicitarlo siguiendo el link anterior)

Luego el tema se simplifica, ya que Delphi nos proporciona una unidad donde se manejan las Phone Call, FMX.PhoneDialer.

Phone Call, ejemplo

En el siguiente ejemplo, realizamos una pregunta, para que el usuario sepa que se va a realizar una llamada, si el usuario responde que “Si”, realizamos la llamada.

Uses
  FMX.PhoneDialer;

private
  { Private declarations }
  PhoneDialerService: IFMXPhoneDialerService; // Servicio Phone Dialer

procedure PhoneCall;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXDialogServiceASync, IInterface(ASyncService)) then
  begin
    ASyncService.MessageDialogAsync('Se realizará una llamada, desea continuar ?', TMsgDlgType.mtConfirmation,
      [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], TMsgDlgBtn.mbNo, 0,
      procedure(const AResult: TModalResult)
      begin
        case AResult of
          mrYES:
            begin
              if TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService)) then
                PhoneDialerService.Call('3542115533')
              else
                ShowMessage('Llamada no soportada.');
            end;
        end;
      end);
  end;
end;

A tener en cuenta: si ven el ejemplo anterior, antes de realizar la llamada con el método PhoneDialerService.Call(‘3542115533’), comprobamos si la versión de Android, soporta este servicio, lo comprobamos en la línea if TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService)) then.

Sabemos que todas las nuevas versiones de Android, soportan dichos servicios, pero ten en cuenta que todavía hay algunos dispositivos móviles con versiones realmente antiguas,