HarmonyOS NEXT实战:拨打电话

1 阅读2分钟

##HarmonyOS Next实战##HarmonyOS SDK应用服务##教育##

目标:输入电话号码,并拨打电话。

知识点: Telephony Kit(蜂窝通信服务)提供一系列API帮助开发者开发通讯类应用,包括:

  • call模块(拨打电话):系统应用可以直接拨打电话,在应用界面显示通话;三方应用可以拉起系统电话应用,跳转至拨号界面,从而实现拨打电话的功能,具体可参考拨打电话开发指导。除此之外,应用还可以通过call模块,实现格式化电话号码、判断是否紧急号码等功能,详情请参考@ohos.telephony.call API参考。
  • sms模块(短信服务):应用可以实现创建、发送短信消息的功能,具体可参考发送短信开发指导。除此之外,应用还可以实现获取、设置短信服务中心地址,和检查当前设备是否具备短信发送和接收能力等功能,详情请参考@ohos.telephony.sms API参考。
  • radio模块(网络搜索):应用可以调用API获取当前注册网络名称、网络服务状态以及信号强度相关信息,详情请参考@ohos.telephony.radio API参考。
  • data模块(蜂窝数据):蜂窝数据是无线通讯技术标准的一种,从数据的传输到交换都采用分组技术(Packet Switch),能够为移动设备提供话音、数据、视频图像等业务,经常用于支持用户在智能设备上使用应用程序,以及在移动网络上浏览网页,详情请参考@ohos.telephony.data API参考。
  • sim模块(SIM卡管理):应用可以调用API获取SIM卡相关信息,如服务提供商、ISO(International Organization for Standardization,国际标准化组织)国家码、归属PLMN(Public Land Mobile Network,公共陆地移动网络)号等,详情请参考@ohos.telephony.sim API参考。

使用makeCall拨打电话

  1. 导入call和observer模块。
  2. 调用hasVoiceCapability,确认当前设备是否支持拨号。
  3. 调用makeCall接口,跳转到拨号界面并显示待拨号的号码。

实战:CallPhoneDemoPage

import { call, observer } from '@kit.TelephonyKit';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct CallPhoneDemoPage {
  @State message: string = 'Hello World';
  @State phone: string = ''

  build() {
    Column({ space: 10 }) {
      Text('拨打电话Demo')
      TextInput({ placeholder: '请输入要拨打的电话' })
        .type(InputType.PhoneNumber)
        .onChange((value) => {
          this.phone = value
        })
      Button('拨号')
        .onClick(() => {
          // 调用查询能力接口
          let isSupport = call.hasVoiceCapability();
          if (isSupport) {
            // 如果设备支持呼叫能力,则继续跳转到拨号界面,并显示拨号的号码
            call.makeCall(this.phone, (err: BusinessError) => {
              if (!err) {
                console.log("make call success.");
              } else {
                console.log("make call fail, err is:" + JSON.stringify(err));
              }
            });

            // 订阅通话业务状态变化(可选)
            class SlotId {
              slotId: number = 0
            }

            class CallStateCallback {
              state: call.CallState = call.CallState.CALL_STATE_UNKNOWN;
              number: string = "";
            }

            let slotId: SlotId = { slotId: 0 }
            observer.on("callStateChange", slotId, (data: CallStateCallback) => {
              console.log("call state change, data is:" + JSON.stringify(data));
            });
          }
        })
    }
    .height('100%')
    .width('100%')
    .padding({ left: 20, right: 20 })
  }
}