鸿蒙HarmonyOS开发:拨打电话、短信服务、网络搜索、蜂窝数据、SIM卡管理、observer订阅管理

发布于:2025-02-10 ⋅ 阅读:(53) ⋅ 点赞:(0)

一、call模块(拨打电话)

系统应用可以直接拨打电话,在应用界面显示通话;三方应用可以拉起系统电话应用,跳转至拨号界面,从而实现拨打电话的功能。除此之外,应用还可以通过call模块,实现格式化电话号码、判断是否紧急号码等功能。

1、使用makeCall拨打电话
  • 导入call和observer模块。

  • 调用hasVoiceCapability,确认当前设备是否支持拨号。

  • 调用makeCall接口,跳转到拨号界面并显示待拨号的号码。

  • 订阅通话业务状态变化。

 // import需要的模块
 import { call, observer } from '@kit.TelephonyKit';
 import { BusinessError } from '@kit.BasicServicesKit';

 // 调用查询能力接口
 let isSupport = call.hasVoiceCapability();
 if (isSupport) {
     // 如果设备支持呼叫能力,则继续跳转到拨号界面,并显示拨号的号码
     call.makeCall("13xxxx", (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));
     });
 }
2、获取当前通话状态
let callState: call.CallState = call.getCallStateSync();
console.log(`the call state is:` + callState);

返回值:

名称 说明
CALL_STATE_UNKNOWN -1 无效状态,当获取呼叫状态失败时返回。
CALL_STATE_IDLE 0 表示没有正在进行的呼叫。
CALL_STATE_RINGING 1 表示来电正在振铃或等待。
CALL_STATE_OFFHOOK 2 表示至少有一个呼叫处于拨号、通话中或呼叫保持状态,并且没有新的来电振铃或等待。
CALL_STATE_ANSWERED 3 表示来电已经接听。
3、判断是否存在通话
let hasCall: boolean = call.hasCallSync();
console.log(`hasCallSync success, has call is ` + hasCall);

返回值:

类型 说明
boolean 返回判断是否存在通话。返回true表示当前存在通话,false表示当前不存在通话。
4、检查当前设备是否具备语音通话能力
let result: boolean = call.hasVoiceCapability();
console.log(`hasVoiceCapability: ${JSON.stringify(result)}`);

返回值:

类型 说明
boolean 返回true表示设备具备语音通话能力,返回false表示设备不具备语音通话能力。

二、sms模块(短信服务)

应用可以实现创建、发送短信消息的功能。除此之外,应用还可以实现获取、设置短信服务中心地址,和检查当前设备是否具备短信发送和接收能力等功能。

1、创建短信
import { sms } from '@kit.TelephonyKit';
import { BusinessError } from '@kit.BasicServicesKit';

const specification: string = '3gpp';
// 以数组的形式显示协议数据单元(PDU),类型为number。
const pdu: Array<number> = [0x01, 0x00, 0x05, 0x81, 0x01, 0x80, 0xF6, 0x00, 0x00, 0x05, 0xE8, 0x32, 0x9B, 0xFD, 0x06];
sms.createMessage(pdu, specification).then((data: sms.ShortMessage) => {
    console.log(`createMessage success, promise: data->${JSON.stringify(data)}`);
}).catch((err: BusinessError) => {
    console.error(`createMessage failed, promise: err->${JSON.stringify(err)}`);
});
2、发送短信
import { sms } from '@kit.TelephonyKit';
import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';

// 短信发送结果回调
let sendCallback: AsyncCallback<sms.ISendShortMessageCallback> = (err: BusinessError, data: sms.ISendShortMessageCallback) => {
    console.log(`sendCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`);
};

// 短信送达结果回调
let deliveryCallback: AsyncCallback<sms.IDeliveryShortMessageCallback> = (err: BusinessError, data: sms.IDeliveryShortMessageCallback) => {
    console.log(`deliveryCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`);
};

// 发送短信的参数
let options: sms.SendMessageOptions = {
    slotId: 0,
    content: '短信内容',
    destinationHost: '+861xxxxxxxxxx',
    serviceCenter: '+861xxxxxxxxxx',
    destinationPort: 1000,
    sendCallback: sendCallback,
    deliveryCallback: deliveryCallback
};

// 使用Promise异步回调
let promise = sms.sendShortMessage(options);
promise.then(() => {
    console.log(`sendShortMessage success`);
}).catch((err: BusinessError) => {
    console.error(`sendShortMessage failed, promise: err->${JSON.stringify(err)}`);
});

发送短信的参数和回调

名称 类型 必填 说明
slotId number 用于发送短信的SIM卡槽ID:
- 0:卡槽1
- 1:卡槽2
destinationHost string 短信的发送地址。
content string,Array 如果内容是字符串,则这是一条文本短信。如果内容是字节数组,则这是一条数据短信。
serviceCenter string 短信中心地址。默认使用SIM卡中的短信中心地址。
destinationPort number 如果发送数据消息,destinationPort 是必需的。否则是可选的。
sendCallback AsyncCallback 短信发送结果回调,返回短信发送的结果,发送数据短信时,此项必填。
deliveryCallback AsyncCallback 短信送达结果回调,返回短信递送报告,发送数据短信时,此项必填。

三、radio模块(网络搜索)

应用可以调用API获取当前注册网络名称、网络服务状态以及信号强度相关信息。

1、获取网络状态
import { BusinessError } from '@kit.BasicServicesKit';

let slotId: number = 0;
radio.getNetworkState(slotId).then((data: radio.NetworkState) => {
    console.log(`getNetworkState success, promise: data->${JSON.stringify(data)}`);
}).catch((err: BusinessError) => {
    console.error(`getNetworkState failed, promise: err->${JSON.stringify(err)}`);
});

返回值:

类型 说明
NetworkState 返回网络状态。

网络注册状态。

名称 类型 必填 说明
longOperatorName string 注册网络的长运营商名称。
shortOperatorName string 注册网络的短运营商名称。
plmnNumeric string 注册网络的PLMN码。
isRoaming boolean 是否处于漫游状态。
regState RegState 设备的网络注册状态。
cfgTech8 RadioTechnology 设备的无线接入技术。
nsaState NsaState 设备的NSA网络注册状态。
isCaActive boolean CA的状态。
isEmergency boolean 此设备是否只允许拨打紧急呼叫。

四、data模块(蜂窝数据)

蜂窝数据是无线通讯技术标准的一种,从数据的传输到交换都采用分组技术(Packet Switch),能够为移动设备提供话音、数据、视频图像等业务,经常用于支持用户在智能设备上使用应用程序,以及在移动网络上浏览网页。

1、检查蜂窝数据业务是否启用
import { data } from '@kit.TelephonyKit';
import { BusinessError } from '@kit.BasicServicesKit';

data.isCellularDataEnabled().then((contextData: boolean) => {
    console.log(`isCellularDataEnabled success, promise: contextData->${JSON.stringify(contextData)}`);
}).catch((err: BusinessError) => {
    console.error(`isCellularDataEnabled fail, promise: err->${JSON.stringify(err)}`);
});

返回值:

类型 说明
boolean true:蜂窝数据业务已启用。false:蜂窝数据业务已禁用。
2、获取蜂窝数据业务的上下行状态
import { data } from '@kit.TelephonyKit';
import { BusinessError } from '@kit.BasicServicesKit';

data.getCellularDataFlowType().then((contextData: data.DataFlowType) => {
    console.log(`getCellularDataFlowType success, promise: contextData->${JSON.stringify(contextData)}`);
}).catch((err: BusinessError) => {
    console.error(`getCellularDataFlowType fail, promise: err->${JSON.stringify(err)}`);
});

返回值:

类型 说明
DataFlowType 蜂窝数据业务的上下行状态。

蜂窝数据流类型。

名称 说明
DATA_FLOW_TYPE_NONE 0 表示没有上行或下行数据。
DATA_FLOW_TYPE_DOWN 1 表示只有下行数据。
DATA_FLOW_TYPE_UP 2 表示只有上行数据。
DATA_FLOW_TYPE_UP_DOWN 3 表示有上下行数据。
DATA_FLOW_TYPE_DORMANT 4 表示没有上下行数据,底层链路处于休眠状态。

五、sim模块(SIM卡管理)

应用可以调用API获取SIM卡相关信息,如服务提供商、ISO(International Organization for Standardization,国际标准化组织)国家码、归属PLMN(Public Land Mobile Network,公共陆地移动网络)号等。

六、observer订阅管理

提供订阅管理功能,可以订阅/取消订阅的事件包括:网络状态变化、信号状态变化、通话状态变化、蜂窝数据链路连接状态、蜂窝数据业务的上下行数据流状态、SIM状态变化。

1、网络状态变化
observer.on('networkStateChange', (data: observer.NetworkState) => {
    console.log("on networkStateChange, data:" + JSON.stringify(data));
});
2、信号状态变化
import { radio } from '@kit.TelephonyKit';

observer.on('signalInfoChange', (data: Array<radio.SignalInformation>) => {
    console.log("on signalInfoChange, data:" + JSON.stringify(data));
});
3、通话状态变化
observer.on('callStateChange', (data: observer.CallStateInfo) => {
    console.log("on callStateChange, data:" + JSON.stringify(data));
});
4、蜂窝数据链路连接状态
observer.on('cellularDataConnectionStateChange', (data: observer.DataConnectionStateInfo) => {
    console.log("on cellularDataConnectionStateChange, data:" + JSON.stringify(data));
});
5、sim状态更改
observer.on('simStateChange', (data: observer.SimStateData) => {
    console.log("on simStateChange, data:" + JSON.stringify(data));
});

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到