一、简介

日常生活中,打电话是最常见的交流方式之一,那么如何在OpenAtom OpenHarmony(简称“OpenHarmony”)中进行电话服务相关的开发呢?今天我们可以一起来了解一下如何通过电话服务系统支持的API实现拨打电话的功能。

二、效果展示

应用可以通过调用call和observer模块的API来获取当前注册网络名称、网络服务状态、信号强度以及SIM卡的相关信息,具体可参考获取当前蜂窝网络信号信息开发指导。

直接拨打电话需要提供系统权限ohos.permission.PLACE_CALL,在这里建议应用使用makeCall(),跳转到拨号界面,并显示拨号的号码,当开发者调用makeCall接口时,设备会自动跳转到拨号界面。

三、接口说明

call模块为开发者提供呼叫管理功能。observer模块为开发者提供通话业务状态订阅和取消订阅功能。

call.hasVoiceCapability():能力获取,表示是否具有语音功能。

call.makeCall()跳转拨号界面,跳转到拨号界面,并显示拨号的号码。

observer.on(‘callStateChange’):订阅通话业务状态变化,

ohos.permission.READ_CALL_LOG (获取通话号码需要该权限)。

observer.off(‘callStateChange’):取消订阅通话业务状态变化。

四、开发步骤

1.import需要的模块。

// import需要的模块
import call from '@ohos.telephony.call';
import observer from '@ohos.telephony.observer';

  

2.调用hasVoiceCapability()接口获取当前设备呼叫能力,如果支持继续下一步;如果不支持则无法发起呼叫。

// 调用查询能力接口
let isSupport = call.hasVoiceCapability();
if (!isSupport) {
console.log("not support voice capability, return.");
return;
}

  

3.跳转到拨号界面,并显示拨号的号码。

// 如果设备支持呼叫能力,则继续跳转到拨号界面,并显示拨号的号码
call.makeCall("13xxxx", (err)=> {
if (!err) {
console.log("make call success.");
} else {
console.log("make call fail, err is:" + JSON.stringify(err));
}
});

  

4.订阅通话业务状态变化。(可选)

// 订阅通话业务状态变化(可选)
observer.on("callStateChange", (data) => {
console.log("call state change, data is:" + JSON.stringify(data));
});

  

5.取消订阅通话业务状态变化。(可选)

// 取消订阅通话业务状态变化
observer.off("callStateChange", (data) => {
console.log("call state change, data is:" + JSON.stringify(data));
});

  

五、完整代码

// import需要的模块
import call from '@ohos.telephony.call';
import observer from '@ohos.telephony.observer';
@Entry
@Component
struct CAllTest{
build(){ Column(){ Button("打电话给坚果").width(300).height(80) .fontSize(30).fontColor(Color.Orange).onClick(()=>{
// 调用查询能力接口
let isSupport = call.hasVoiceCapability();
if (!isSupport) {
console.info(" support voice capability, return");
return;
}
// 如果设备支持呼叫能力,则继续跳转到拨号界面,并显示拨号的号码
call.makeCall("17752170152", (err)=> {
if (!err) {
console.info(" make call success."); } else {
console.info("make call fail, err is:" + JSON.stringify(err));
}
}); }) }.width("100%").height("100%").justifyContent(FlexAlign.Center) }
}

  

源码地址

https://gitee.com/jianguo888/callphone

六、总结

本文通过一个按钮,实现了跳转拨号的功能。首先为按钮添加点击事件,其次导入需要的模块,调用hasVoiceCapability()接口获取当前设备呼叫能力,最终实现一键跳转到拨号界面。大家可以将这个功能扩展到自己的应用里。比如,在一键呼叫,售后服务等场景。

在DAYU200上实现OpenHarmony跳转拨号界面的更多相关文章

  1. 安卓版微信内置浏览器,<a href="tel:电话号码"></a> 这个链接失效,不能跳到拨号界面?

    https://segmentfault.com/q/1010000000318831 在URL最后面加“ #mp.weixin.qq.com ”,应该加其他qq.com的二级域名都行,估计是微信的安 ...

  2. vue点击跳转拨号界面

    <a :href="'tel:' + VipInfo.HotelPhone" style="text-decoration:none;color:black;opa ...

  3. Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 1.跳转到拨号界面,代码如下: 1)直接拨打 Intent intentPhone = new Intent ...

  4. Android开发中使用Intent跳转到系统应用中的拨号界面、联系人界面、短信界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 首先,我们先看拨号界面,代码如下: Intent intent =new Intent(); intent. ...

  5. Intent跳转到系统应用中的拨号界面、联系人界面、短信界面及其他

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 首先,我们先看拨号界面,代码如下: Intent intent =new Intent(); intent. ...

  6. 从tabBarController的一个item上的控制器跳转到另一个item上的控制器

    先从习惯性的tabBarController开始,很多应用的外框都是用这个开始的,而从tabBarController的一个item上的控制器跳转到另一个上的,往往都是直接通过点击tabBar上的不同 ...

  7. struts2--上传总结(限制大小和类型 非法上传的跳转)

    网上有很多版本,鉴于实践出真知的态度 我自己探索了一番 struts版本:2.3.16 限制大小: struts2默认是2M 所以如果要扩大大小限制,应该先配一个全局struts2最大上限 <c ...

  8. 阿里云SLB上http强制跳转到https问题处理

    背景: 最近一客户有一个需求,需要将外网所有http访问请求强制跳转到https,公网出口使用阿里云SLB,证书放在SLB上,SLB后端实例为ECS(webserver)web服务使用nginx, 网 ...

  9. CentOS Linux上搭建PPPoE服务器及拨号设置

    CentOS Linux上搭建PPPoE服务器及拨号设置 搭建PPPoE,成功了的话,就觉得超级简单,在CentOS Linux更是5步左右就能搞定. 1.安装pppoe,安装完成后,会有pppoe- ...

  10. 从上一个页面跳入新页面时,如何拿URL中的参数

    var url = document.URL; //获取当前页面的url var urlA = url.split('?');//以url中的问号进行分割; var goodscode = urlA[ ...

随机推荐

  1. django中_meta组件

    # _meta组件是一个django中任何一个model类的类实例用来自省的api,简单点说,比如有一个Accounts的模型,则 Accounts._meta # 常用接口 model.Userin ...

  2. vue 项目npm run dev(启动)时报错The service was stopped

    vue项目yarn upgrade后vite build报错,如何项目也运行不起来了. 报错截图: 解决办法: 删除node_modules文件夹,然后执行yarn install重新生成心的node ...

  3. 【规范】Apifox就应该这么玩

    前言 缘由 好的工具就要配好的玩法 起因是最近在回顾项目时,看到了年事已高并且长时间不用的Postman,发现之前自己整理的接口文档十分混乱且没有规律.遂打开现在使用的Apifox,将本狗目前项目中使 ...

  4. Swoft - Bean

    一.Bean 在 Swoft 中,一个 Bean 就是一个类的一个对象实例. 它(Bean)是通过容器来存放和管理整个生命周期的. 最直观的感受就是省去了频繁new的过程,节省了资源的开销. 二.Be ...

  5. Go语言VSCode开发环境配置

    最近学习Golang,先把开发环境配置好. 一.安装Go语言开发包 https://golang.google.cn/dl/ 按步骤安装即可,安装完成后需要设置Windows环境变量 配置好,做个测试 ...

  6. maven打包出现 ����applets.user.service.UserService����-2022新项目

    一.问题由来 新项目的框架刚搭建好,还不能正常的运行,我们这边就开始写代码,因为项目还在设计阶段,很多东西比如说需求 都还在讨论之中.分层架构采用的是cola4.0的架构,具体的代码由我们自己来进行实 ...

  7. 孔夫子旧书网书籍信息得爬取并保存为json,csv,excel多种文件格式

    python版本:3.7 需要得引入得包: from selenium import webdriver from selenium.common.exceptions import TimeoutE ...

  8. arch安装xfce4的时候,出现无法设置开机启动的问题

    sudo systemctl enable lightdm   Failed to enable unit: File /etc/systemd/system/display-manager.serv ...

  9. 【目标检测】Faster R-CNN算法实现

    一.前言 继2014年的R-CNN.2015年的Fast R-CNN后,2016年目标检测领域再次迎来Ross Girshick大佬的神作Faster R-CNN,一举解决了目标检测的实时性问题.相较 ...

  10. Spring Boot学习日记15

    使用thymeleaf <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.o ...