当前位置: 首页 > article >正文

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

文章目录

      • 一、call模块(拨打电话)
        • 1、使用makeCall拨打电话
        • 2、获取当前通话状态
        • 3、判断是否存在通话
        • 4、检查当前设备是否具备语音通话能力
      • 二、sms模块(短信服务)
        • 1、创建短信
        • 2、发送短信
      • 三、radio模块(网络搜索)
        • 1、获取网络状态
      • 四、data模块(蜂窝数据)
        • 1、检查蜂窝数据业务是否启用
        • 2、获取蜂窝数据业务的上下行状态
      • 五、sim模块(SIM卡管理)
      • 六、observer订阅管理
        • 1、网络状态变化
        • 2、信号状态变化
        • 3、通话状态变化
        • 4、蜂窝数据链路连接状态
        • 5、sim状态更改

一、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_IDLE0表示没有正在进行的呼叫。
CALL_STATE_RINGING1表示来电正在振铃或等待。
CALL_STATE_OFFHOOK2表示至少有一个呼叫处于拨号、通话中或呼叫保持状态,并且没有新的来电振铃或等待。
CALL_STATE_ANSWERED3表示来电已经接听。
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)}`);
});

发送短信的参数和回调

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

三、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返回网络状态。

网络注册状态。

名称类型必填说明
longOperatorNamestring注册网络的长运营商名称。
shortOperatorNamestring注册网络的短运营商名称。
plmnNumericstring注册网络的PLMN码。
isRoamingboolean是否处于漫游状态。
regStateRegState设备的网络注册状态。
cfgTech8RadioTechnology设备的无线接入技术。
nsaStateNsaState设备的NSA网络注册状态。
isCaActivebooleanCA的状态。
isEmergencyboolean此设备是否只允许拨打紧急呼叫。

四、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)}`);
});

返回值:

类型说明
booleantrue:蜂窝数据业务已启用。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_NONE0表示没有上行或下行数据。
DATA_FLOW_TYPE_DOWN1表示只有下行数据。
DATA_FLOW_TYPE_UP2表示只有上行数据。
DATA_FLOW_TYPE_UP_DOWN3表示有上下行数据。
DATA_FLOW_TYPE_DORMANT4表示没有上下行数据,底层链路处于休眠状态。

五、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));
});

在这里插入图片描述


http://www.kler.cn/a/469062.html

相关文章:

  • 【连续学习之LwM算法】2019年CVPR顶会论文:Learning without memorizing
  • 彻底学会Gradle插件版本和Gradle版本及对应关系
  • MyBatis 配置文件全解析
  • 【LC】2469. 温度转换
  • 【信号滤波 (补充)】二阶陷波滤波代码推导过程(C++)
  • 海外招聘丨 弗拉瑞克商学院—博士研究员:智能家居技术业务和能源管理中的数据分析和人工智能
  • 【双层模型】考虑供需双侧的综合能源双层优化模型
  • 钓鱼攻击(Phishing)详解和实现 (网络安全)
  • 中国乡镇界shp全境arcgis格式shp数据乡镇名称下载后内容测评
  • redis源码系列--(四)--redis cluster
  • Mono里运行C#脚本25—mono_codegen
  • jenkins入门--安装jenkins
  • C++实现图书管理系统(Qt C++ GUI界面版)
  • Python抓取豆瓣电影Top250
  • 2025工作管理综合指南:Jira、Confluence等Atlassian工具套件在工作管理中的应用
  • graylog配置日志关键字邮件Email告警
  • 区块链:四大方面引领数字革命新篇章
  • 力扣hot100——栈
  • 在科技查新中怎样判定其项目的新颖性?
  • 单片机复位电路基本理解教程文章·含上拉电阻理解电容开路理解!!!
  • Python中对象序列化以及反序列化的方法
  • Day 22:数据库与 Spring Data JPA
  • Unity3D仿星露谷物语开发17之空库存栏UI
  • vue3如何实现防抖?
  • atrust异常导致ERR_NETWORK_CHANGED
  • 2025-01-04 Unity插件 YodaSheet2 —— 基础用法