Android实例-使用电话拨号器在移动设备上

Android实例-使用电话拨号器在移动设备上


源文地址:

http://docwiki.embarcadero.com/RADStudio/XE5/en/Mobile_Tutorial:_Using_the_Phone_Dialer_on_Mobile_Devices_(iOS_and_Android)

1.获取运营商、国家代码

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation,
  FMX.StdCtrls, FMX.Edit,
  FMX.Platform,//需要引入
  FMX.PhoneDialer;//需要引入

type
  TForm1 = class(TForm)
    Button1: TButton;
    lblCarrierName: TEdit;
    lblISOCountryCode: TEdit;
    Button2: TButton;
    edtTelephoneNumber: TEdit;
    lblCallState: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    //电话服务
    PhoneDialerService: IFMXPhoneDialerService;
    { Private declarations }
  public
    //需要覆盖
    constructor Create(AOwner: TComponent); override;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}
{$R *.NmXhdpiPh.fmx ANDROID}

{ TForm1 }

//获取电话服务
constructor TForm1.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService));
end;

//获取运营商
procedure TForm1.Button1Click(Sender: TObject);
begin
 { test whether the PhoneDialer services are supported on your device }
  if Assigned(PhoneDialerService) then
  begin
    { if yes, then update the labels with the retrieved information }
    lblCarrierName.Text := 'Carrier Name:  '  + PhoneDialerService.GetCarrier.GetCarrierName;
    lblISOCountryCode.Text := 'ISO Country Code: ' + PhoneDialerService.GetCarrier.GetIsoCountryCode;
  end;
end;

end.

2.实现打电话功能

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation,
  FMX.StdCtrls, FMX.Edit,
  FMX.Platform,//需要引入
  FMX.PhoneDialer;//需要引入

type
  TForm1 = class(TForm)
    Button1: TButton;
    lblCarrierName: TEdit;
    lblISOCountryCode: TEdit;
    Button2: TButton;
    edtTelephoneNumber: TEdit;
    lblCallState: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    //电话服务
    PhoneDialerService: IFMXPhoneDialerService;
    { Private declarations }
  public
    //需要覆盖
    constructor Create(AOwner: TComponent); override;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}
{$R *.NmXhdpiPh.fmx ANDROID}

{ TForm1 }
//获取电话服务
constructor TForm1.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService));
end;

//打电话功能
procedure TForm1.Button2Click(Sender: TObject);
begin
 { test whether the PhoneDialer services are supported on your device }
  if Assigned(PhoneDialerService) then
  begin
    { if the Telephone Number is entered in the edit box then make the call, else
      display an error message }
    if edtTelephoneNumber.Text <> '' then
      PhoneDialerService.Call(edtTelephoneNumber.Text)
    else
    begin
      ShowMessage('Please type-in a telephone number.');
      edtTelephoneNumber.SetFocus;
    end;
  end;
end;

end.

3.检测呼叫状态的变化

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation,
  FMX.StdCtrls, FMX.Edit,
  FMX.Platform,//需要引入
  FMX.PhoneDialer;//需要引入

type
  TForm1 = class(TForm)
    Button1: TButton;
    lblCarrierName: TEdit;
    lblISOCountryCode: TEdit;
    Button2: TButton;
    edtTelephoneNumber: TEdit;
    lblCallState: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    //电话服务
    PhoneDialerService: IFMXPhoneDialerService;
    //定义方法
    procedure MyOnCallStateChanged(const ACallID: String; const ACallState: TCallState);
    { Private declarations }
  public
    //需要覆盖
    constructor Create(AOwner: TComponent); override;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}
{$R *.NmXhdpiPh.fmx ANDROID}

{ TForm1 }

//获取电话服务
constructor TForm1.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService));
  if Assigned(PhoneDialerService) then
    PhoneDialerService.OnCallStateChanged := MyOnCallStateChanged;
end;

//检测呼叫状态的变化
procedure TForm1.MyOnCallStateChanged(const ACallID: String;
  const ACallState: TCallState);
var outText: String;
begin
  case ACallState of
       FMX.PhoneDialer.TCallState.None:         outText := 'No calls';
       FMX.PhoneDialer.TCallState.Connected:    outText := 'Connected';
       FMX.PhoneDialer.TCallState.Incoming:     outText := 'Incoming call';
       FMX.PhoneDialer.TCallState.Dialing:      outText := 'Dialing';
       FMX.PhoneDialer.TCallState.Disconnected: outText := 'Disconnected';
  end;
  lblCallState.Text := outText;
end;

end.

 IFMXPhoneDialerService 接口提供了 OnCallStateChanged 事件,允许您处理呼叫状态的变化。 的 TCallState 枚举描述可能的电话状态。

下面的表描述的物品 TCallState 枚举(为每个平台支持的州是标有“+”)。 

描述iOS安卓
csNone 没有呼叫状态。 + - - - - - -
csConnected 电话调用者与被调用方。 + +
csIncoming 传入的电话。 + +
csDialing 手机在拨号状态。 + - - - - - -
csDisconnected 调用断开连接。 +
原文地址:https://www.cnblogs.com/m0488/p/7266070.html