HarmonyOS 鸿蒙Next 如何使用距离传感器实现语音通话时贴近耳朵黑屏

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何使用距离传感器实现语音通话时贴近耳朵黑屏

音视频通话时实现贴近耳朵时息屏并切换扬声器听筒,有距离传感器可以用吗?

2 回复

将手机贴近耳朵收听视频通话的声音,此时屏幕应该熄灭;手机离开耳朵时,再让屏幕重新亮起。

针对这一场景,系统提供了接近光锁,用于感知传感器与障碍物的距离远近,自动发起亮灭屏流程。下面的代码中,runningLock.RunningLockType.PROXIMITY_SCREEN_CONTROL 表示类型为接近光锁,锁的名称为 running_lock_text;lock.hold(-1) 表示永久持有接近光锁,参数也可以根据实际需要改为其他数字,表示持锁时长。

runningLock.create('running_lock_test', runningLock.RunningLockType.PROXIMITY_SCREEN_CONTROL, (err: Error, lock: runningLock.RunningLock) => {
  if (typeof err === 'undefined') {
    console.log('create running lock: ' + lock);
    this.recordLock = lock;
    try {
      lock.hold(-1);
      console.log('hold running lock success');
    } catch(err) {
      console.log('hold running lock failed, err: ' + err);
    }
  } else {
    console.log('create running lock failed, err: ' + err);
  }
});

上面我们实现了手机贴耳灭屏、离耳亮屏的需求,但是这里有一个缺陷,上面的方法只是感知了障碍物和传感器的距离发起亮、灭屏,这就意味着,我们用手或者其他部位遮挡了传感器,同样会触发灭屏。

而在视频通话过程中,用户经常会不小心用手挡住或者划过传感器,造成屏幕突然的一熄一亮,体验很差,容易对用户造成惊吓。因此,我们需要区分意外遮挡传感器和主动贴近耳朵遮挡传感器的场景。

手机贴耳场景和手部误触传感器的场景区别主要在于手机的运动状态,所以可以通过加速度传感器来判断手机状态以区分这两个场景。

sensor.on(sensor.SensorId.ACCELEROMETER, (data: sensor.AccelerometerResponse) => {
      console.info("Succeeded in obtaining data. x: " + data.x + " y: " + data.y + " z: " + data.z);
}, { interval: 100000000 });

总结最终实现视频通话过程中的亮屏、灭屏控制方案如下:

视频通话开始时,调用 window.setWindowKeepScreenOn 保持手机屏幕常亮; 订阅加速度传感器,根据加速度传感器返回的数据,判断手机是否贴耳。 手机贴耳时,申请持有接近光锁,自动发起灭屏、亮屏流程;手机离耳时,释放接近光锁,这样可避免误触传感器导致的意外灭屏。 第3步中,一定要在手机重新亮起时释放接近光锁,否则会出现灭屏后手机离耳无法亮屏的情况。判断手机是否亮屏,可以通过电源的 power.isActive() 方法获取屏幕状态。代码实例如下:

setAccelerometerSensor(isOn: boolean = true) {
  if (!isOn) {
    sensor.off(sensor.SensorId.ACCELEROMETER)
    return
  }
  
  sensor.on(sensor.SensorId.ACCELEROMETER, (data: sensor.AccelerometerResponse) => {
    console.info("Succeeded in obtaining data. x: " + data.x + " y: " + data.y + " z: " + data.z);
    if (this.checkProximityOfEar(data)) {
      // 持有接近光锁
      this.setRunningLock()
    } else {
      // 一定要在屏幕亮起时取消接近光,否则无法重新亮屏
      if (power.isActive()) {
        setTimeout(() => {
          // 释放接近光锁
          this.setRunningLock(false)
        }, 500)
      }
    }
  }, { interval: 100000000 });
}

作为IT专家,对于HarmonyOS鸿蒙Next系统中使用距离传感器实现语音通话时贴近耳朵黑屏的功能,以下是相关说明:

HarmonyOS鸿蒙Next系统中的距离传感器主要用于检测物体与手机之间的距离。当进行语音通话时,若手机贴近耳朵,距离传感器会检测到这一变化,并通知手机屏幕熄灭,以防止误触。这一设计旨在提高用户体验,同时节省电量。

通常情况下,该功能为系统默认设置,无需用户手动开启。若希望在语音通话时屏幕保持常亮,可通过以下方式调整(以微信为例):

  1. 打开微信,进入“我”页面。
  2. 点击“设置”,选择“聊天”选项。
  3. 查找并关闭“使用听筒播放语音”的开关。

请注意,不同版本的鸿蒙Next系统或微信应用可能在界面布局或设置路径上存在差异。若上述方法无法解决问题,可能是系统或应用版本不兼容导致,建议更新至最新版本。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部