zoukankan      html  css  js  c++  java
  • 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 调用断开连接。 +
  • 相关阅读:
    .NET WinForm下StatusStrip控件如何设置分隔线及部分子控件右对齐
    winform 弹出窗体指定位置
    命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?)
    SQL之case when then用法详解
    VS2015编译错误:调用的目标发生了异常--->此实现不是Windows平台FLPS验证的加密算法的一部分。
    .NET Core 控制台中文乱码问题!
    IOC 依赖注入 Unity
    《重构:改善代码的既有设计》读书笔记
    .NET中的堆(Heap)和栈(Stack)的本质
    浅谈 Sql Server 游标
  • 原文地址:https://www.cnblogs.com/karkash/p/7266070.html
Copyright © 2011-2022 走看看