一、简介
日常生活中,打电话是最常见的交流方式之一,那么如何在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需要的模块。
1 2 3 4 | // import需要的模块 import call from '@ohos.telephony.call' ; import observer from '@ohos.telephony.observer' ; |
2.调用hasVoiceCapability()接口获取当前设备呼叫能力,如果支持继续下一步;如果不支持则无法发起呼叫。
1 2 3 4 5 6 7 | // 调用查询能力接口 let isSupport = call.hasVoiceCapability(); if (!isSupport) { console.log( "not support voice capability, return." ); return ; } |
3.跳转到拨号界面,并显示拨号的号码。
1 2 3 4 5 6 7 8 9 | // 如果设备支持呼叫能力,则继续跳转到拨号界面,并显示拨号的号码 call.makeCall( "13xxxx" , (err)=> { if (!err) { console.log( "make call success." ); } else { console.log( "make call fail, err is:" + JSON.stringify(err)); } }); |
4.订阅通话业务状态变化。(可选)
1 2 3 4 5 | // 订阅通话业务状态变化(可选) observer. on ( "callStateChange" , (data) => { console.log( "call state change, data is:" + JSON.stringify(data)); }); |
5.取消订阅通话业务状态变化。(可选)
1 2 3 4 5 | // 取消订阅通话业务状态变化 observer.off( "callStateChange" , (data) => { console.log( "call state change, data is:" + JSON.stringify(data)); }); |
五、完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // 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()接口获取当前设备呼叫能力,最终实现一键跳转到拨号界面。大家可以将这个功能扩展到自己的应用里。比如,在一键呼叫,售后服务等场景。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析