HarmonyOS鸿蒙Next开发:电话服务使用

HarmonyOS鸿蒙Next开发:电话服务使用 使用前景

电话服务系统提供了一系列的API用于获取无线蜂窝网络和SIM卡相关的一些信息。应用可以通过调用RadioInfoManager中的API,来获取当前注册网络名称、网络服务状态以及信号强度等信息;以及调用SimInfoManager中的API,来获取SIM卡的相关信息。

使用开发

注册获取SIM卡状态接口仅针对有SIM卡在位场景生效,若用户拔出SIM卡,则接收不到回调事件。应用可通过调用hasSimCard接口来确定当前卡槽是否有卡在位。应用通常需要获取用户所在蜂窝网络下信号信息,以便获取当前驻网质量。开发者可以通过本业务,获取到用户指定SIM卡当前所在网络下的信号信息。

RadioInfoManager类使用:

功能分类 接口名 描述 所需权限
获取管理对象 getInstance(Context context) 获取网络管理对象。
信号强度信息 getSignalInfoList(int slotId) 获取当前注册蜂窝网络信号强度信息。

RadioInfoManager实例:

  • 调用RadioInfoManager的getInstance接口,获取到RadioInfoManager实例。
  • 调用getSignalInfoList(slotId)方法,返回所有SignalInformation列表。
  • 遍历SignalInformation列表,并分别根据getNetworkType()转换为对应制式的SignalInformation子类对象。
  • 调用子类中的方法,获取信号强度信息。

RadioStateObserver类使用:

提供了观察蜂窝网络状态变化的方法,为了能够实时观察蜂窝网络状态变化,应用必须包含以下权限。

观察状态名称 权限名称
网络状态信息(NETWORK_STATE) ohos.permission.GET_NETWORK_INFO
信号信息(SIGNAL_INFO) NA

需要使用RadioInfoManager的如下接口将继承RadioStateObserver类的对象注册到系统服务:

接口名 观察事件的掩码 描述
addObserver OBSERVE_MASK_NETWORK_STATE 观察蜂窝网络驻网状态信息。
addObserver OBSERVE_MASK_SIGNAL_INFO 观察蜂窝网络信号信息。
removeObserver N/A 停止观察所有状态的变化。

代码实例:

添加观察事件

  • 调用RadioInfoManager的getInstance接口,获取到RadioInfoManager实例。
  • 创建继承RadioStateObserver的类MyRadioStateObserver,并覆写状态变化回调方法。
  • 创建MyRadioStateObserver的对象observer。
  • 调用RadioInfoManager的addObserver方法,传入已创建的MyRadioStateObserver对象observer和需要观察的mask。
// 获取RadioInfoManager对象。RadioInfoManager radioInfoManager = RadioInfoManager.getInstance(context);
// 创建继承RadioStateObserver的类MyRadioStateObserver
class MyRadioStateObserver extends RadioStateObserver {
    // 构造方法,在当前线程的runner中执行回调,slotId需要传入要观察的卡槽ID(0或1)。
    MyRadioStateObserver(int slotId) {
        super(slotId);
    }
    // 构造方法,在执行runner中执行回调。
    MyRadioStateObserver(int slotId, EventRunner runner) {
        super(slotId, runner);
    }
    // 网络注册状态变化的回调方法。
    @Override
    public void onNetworkStateUpdated(NetworkState state) {
        ...
    }
    // 信号信息变化的回调方法。
    @Override
    public void onSignalInfoUpdated(List<SignalInformation> signalInfos) {
        ...
    }
}
// 执行回调的runner。
EventRunner runner = EventRunner.create();
// 创建MyRadioStateObserver的对象。
MyRadioStateObserver observer = new MyRadioStateObserver(slotId, runner);
// 添加回调,以NETWORK_STATE和SIGNAL_INFO为例。
radioInfoManager.addObserver(observer, RadioStateObserver.OBSERVE_MASK_NETWORK_STATE | RadioStateObserver.OBSERVE_MASK_SIGNAL_INFO);

停止观察

  • 调用RadioInfoManager的getInstance接口,获取到RadioInfoManager实例。
  • 调用RadioInfoManager的removeObserver方法,传入添加观察事件时创建的MyRadioStateObserver对象observer。
// 获取RadioInfoManager对象。RadioInfoManager radioInfoManager = RadioInfoManager.getInstance(context);
// 停止观察
radioInfoManager.removeObserver(observer);

以上就是参考harmonyos开发文档整理的实例,具体可以参考开发文档:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/connectivity-telephony-overview-0000000000032157

完毕!!!


更多关于HarmonyOS鸿蒙Next开发:电话服务使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

谢楼主分享~!!

更多关于HarmonyOS鸿蒙Next开发:电话服务使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next开发中,电话服务的使用主要涉及[@ohos](/user/ohos).telephony模块。该模块提供了与电话服务相关的API,包括拨打电话、接听电话、获取通话状态、管理SIM卡信息等功能。

  1. 拨打电话:使用call方法可以拨打电话。需要传入电话号码和拨号选项。示例代码如下:

    import telephony from '[@ohos](/user/ohos).telephony';
    telephony.call('123456789', { disable: false });
    
  2. 接听电话answer方法用于接听来电。示例代码如下:

    import telephony from '[@ohos](/user/ohos).telephony';
    telephony.answer();
    
  3. 获取通话状态getCallState方法可以获取当前通话状态。示例代码如下:

    import telephony from '[@ohos](/user/ohos).telephony';
    let callState = telephony.getCallState();
    
  4. 管理SIM卡信息getSimState方法可以获取SIM卡状态。示例代码如下:

    import telephony from '[@ohos](/user/ohos).telephony';
    let simState = telephony.getSimState();
    
  5. 监听电话状态变化on方法可以监听电话状态变化。示例代码如下:

    import telephony from '[@ohos](/user/ohos).telephony';
    telephony.on('callStateChange', (state) => {
        console.log('Call state changed:', state);
    });
    

这些API可以帮助开发者在HarmonyOS鸿蒙Next应用中实现电话服务功能。

在HarmonyOS鸿蒙Next开发中,电话服务主要通过TelephonyManager类实现。开发者可以获取设备电话状态、SIM卡信息、网络类型等。常用方法包括getCallState()获取通话状态,getNetworkType()获取网络类型,getSimState()获取SIM卡状态。需在config.json中声明ohos.permission.READ_PHONE_STATE权限。示例代码:

TelephonyManager tm = getContext().getSystemService(TelephonyManager.class);
int callState = tm.getCallState();
String networkType = tm.getNetworkType();

确保权限申请和隐私合规。

回到顶部