• Android实例-使用电话拨号器在移动设备上(官方)(XE8+小米2)


    源文地址:

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

     

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

     1 unit Unit1;
     2 
     3 interface
     4 
     5 uses
     6   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
     7   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation,
     8   FMX.StdCtrls, FMX.Edit,
     9   FMX.Platform,//需要引入
    10   FMX.PhoneDialer;//需要引入
    11 
    12 type
    13   TForm1 = class(TForm)
    14     Button1: TButton;
    15     lblCarrierName: TEdit;
    16     lblISOCountryCode: TEdit;
    17     Button2: TButton;
    18     edtTelephoneNumber: TEdit;
    19     lblCallState: TEdit;
    20     Label1: TLabel;
    21     Label2: TLabel;
    22     Label3: TLabel;
    23     procedure Button1Click(Sender: TObject);
    24     procedure Button2Click(Sender: TObject);
    25   private
    26     //电话服务
    27     PhoneDialerService: IFMXPhoneDialerService;
    28     { Private declarations }
    29   public
    30     //需要覆盖
    31     constructor Create(AOwner: TComponent); override;
    32     { Public declarations }
    33   end;
    34 
    35 var
    36   Form1: TForm1;
    37 
    38 implementation
    39 
    40 {$R *.fmx}
    41 {$R *.NmXhdpiPh.fmx ANDROID}
    42 
    43 { TForm1 }
    44 
    45 //获取电话服务
    46 constructor TForm1.Create(AOwner: TComponent);
    47 begin
    48   inherited Create(AOwner);
    49   TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService));
    50 end;
    51 
    52 //获取运营商
    53 procedure TForm1.Button1Click(Sender: TObject);
    54 begin
    55  { test whether the PhoneDialer services are supported on your device }
    56   if Assigned(PhoneDialerService) then
    57   begin
    58     { if yes, then update the labels with the retrieved information }
    59     lblCarrierName.Text := 'Carrier Name:  '  + PhoneDialerService.GetCarrier.GetCarrierName;
    60     lblISOCountryCode.Text := 'ISO Country Code: ' + PhoneDialerService.GetCarrier.GetIsoCountryCode;
    61   end;
    62 end;
    63 
    64 end.

    2.实现打电话功能

     1 unit Unit1;
     2 
     3 interface
     4 
     5 uses
     6   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
     7   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation,
     8   FMX.StdCtrls, FMX.Edit,
     9   FMX.Platform,//需要引入
    10   FMX.PhoneDialer;//需要引入
    11 
    12 type
    13   TForm1 = class(TForm)
    14     Button1: TButton;
    15     lblCarrierName: TEdit;
    16     lblISOCountryCode: TEdit;
    17     Button2: TButton;
    18     edtTelephoneNumber: TEdit;
    19     lblCallState: TEdit;
    20     Label1: TLabel;
    21     Label2: TLabel;
    22     Label3: TLabel;
    23     procedure Button1Click(Sender: TObject);
    24     procedure Button2Click(Sender: TObject);
    25   private
    26     //电话服务
    27     PhoneDialerService: IFMXPhoneDialerService;
    28     { Private declarations }
    29   public
    30     //需要覆盖
    31     constructor Create(AOwner: TComponent); override;
    32     { Public declarations }
    33   end;
    34 
    35 var
    36   Form1: TForm1;
    37 
    38 implementation
    39 
    40 {$R *.fmx}
    41 {$R *.NmXhdpiPh.fmx ANDROID}
    42 
    43 { TForm1 }
    44 //获取电话服务
    45 constructor TForm1.Create(AOwner: TComponent);
    46 begin
    47   inherited Create(AOwner);
    48   TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService));
    49 end;
    50 
    51 //打电话功能
    52 procedure TForm1.Button2Click(Sender: TObject);
    53 begin
    54  { test whether the PhoneDialer services are supported on your device }
    55   if Assigned(PhoneDialerService) then
    56   begin
    57     { if the Telephone Number is entered in the edit box then make the call, else
    58       display an error message }
    59     if edtTelephoneNumber.Text <> '' then
    60       PhoneDialerService.Call(edtTelephoneNumber.Text)
    61     else
    62     begin
    63       ShowMessage('Please type-in a telephone number.');
    64       edtTelephoneNumber.SetFocus;
    65     end;
    66   end;
    67 end;
    68 
    69 end.

    3.检测呼叫状态的变化

     1 unit Unit1;
     2 
     3 interface
     4 
     5 uses
     6   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
     7   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation,
     8   FMX.StdCtrls, FMX.Edit,
     9   FMX.Platform,//需要引入
    10   FMX.PhoneDialer;//需要引入
    11 
    12 type
    13   TForm1 = class(TForm)
    14     Button1: TButton;
    15     lblCarrierName: TEdit;
    16     lblISOCountryCode: TEdit;
    17     Button2: TButton;
    18     edtTelephoneNumber: TEdit;
    19     lblCallState: TEdit;
    20     Label1: TLabel;
    21     Label2: TLabel;
    22     Label3: TLabel;
    23     procedure Button1Click(Sender: TObject);
    24     procedure Button2Click(Sender: TObject);
    25   private
    26     //电话服务
    27     PhoneDialerService: IFMXPhoneDialerService;
    28     //定义方法
    29     procedure MyOnCallStateChanged(const ACallID: String; const ACallState: TCallState);
    30     { Private declarations }
    31   public
    32     //需要覆盖
    33     constructor Create(AOwner: TComponent); override;
    34     { Public declarations }
    35   end;
    36 
    37 var
    38   Form1: TForm1;
    39 
    40 implementation
    41 
    42 {$R *.fmx}
    43 {$R *.NmXhdpiPh.fmx ANDROID}
    44 
    45 { TForm1 }
    46 
    47 //获取电话服务
    48 constructor TForm1.Create(AOwner: TComponent);
    49 begin
    50   inherited Create(AOwner);
    51   TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(PhoneDialerService));
    52   if Assigned(PhoneDialerService) then
    53     PhoneDialerService.OnCallStateChanged := MyOnCallStateChanged;
    54 end;
    55 
    56 //检测呼叫状态的变化
    57 procedure TForm1.MyOnCallStateChanged(const ACallID: String;
    58   const ACallState: TCallState);
    59 var outText: String;
    60 begin
    61   case ACallState of
    62        FMX.PhoneDialer.TCallState.None:         outText := 'No calls';
    63        FMX.PhoneDialer.TCallState.Connected:    outText := 'Connected';
    64        FMX.PhoneDialer.TCallState.Incoming:     outText := 'Incoming call';
    65        FMX.PhoneDialer.TCallState.Dialing:      outText := 'Dialing';
    66        FMX.PhoneDialer.TCallState.Disconnected: outText := 'Disconnected';
    67   end;
    68   lblCallState.Text := outText;
    69 end;
    70 
    71 end.

    PS:

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

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

    描述 iOS 安卓
    csNone 没有呼叫状态。 + - - - - - -
    csConnected 电话调用者与被调用方。 + +
    csIncoming 传入的电话。 + +
    csDialing 手机在拨号状态。 + - - - - - -
    csDisconnected 调用断开连接。 +

     

     

  • 相关阅读:
    final方法修饰继承问题
    日期比较
    子类继承父类,初始化以及方法调用顺序
    linux机器上实现占用固定cpu使用率,并将程序绑定到固定cpu上
    【译】Rust宏:教程与示例(二)
    【译】Rust宏:教程与示例(一)
    【译】Async/Await(五)—— Executors and Wakers
    【译】Async/Await(四)—— Pinning
    通过工具dumpbin.exe快速查看dll的编译版本是Release还是Debug
    【常用操作】ubuntu部署说明
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/4721610.html
Copyright © 2020-2023  润新知