接近传感器是一种红外传感器,无需物理接触即可检测智能手机屏幕前的物体存在。其主要功能是在通话期间关闭显示屏,以防止脸颊误触并节省电池电量。根据 Google Android Developer Guide, 2024,现代接近传感器可测量 0 到 10 厘米的距离,精度为 0.5 厘米,响应时间小于 50 毫秒。
主要内容
接近传感器是一种非接触式红外传感器,位于智能手机前面板顶部,听筒扬声器旁边。它由红外 LED 和光电探测器(光电二极管或光电晶体管)组成。第一款配备接近传感器的大众智能手机是 Apple iPhone(2007 年)——从那时起,传感器成为所有现代手机的必备组件。
传感器通常隐藏在 屏幕玻璃 下方,仅在特定角度下可见为一个小点。在现代型号中,采用窄方向图(15-30 度)的光学模块,以排除玻璃反射的误读。制造商 — Sharp、ams OSRAM(TMD 系列)、Silicon Labs 及其代工合作伙伴。
| 参数 | 数值 |
|---|---|
| 波长 | 850-940 纳米(不可见红外范围) |
| 范围 | 0-10 厘米 |
| 分辨率 | 0.5 厘米 |
| 功耗 | 0.3-0.7 毫安 |
| 响应时间 | 10-50 毫秒 |
移动设备中使用 分立传感器(独立的红外 LED + 光电二极管芯片)和 集成模块(两个元件在同一芯片上)。集成解决方案(ams TMD2635,尺寸 1×1×0.5 毫米)用于现代旗舰的超薄机身,在电路板上占用最小空间。
接近传感器的工作原理基于 测量反射红外辐射的强度。红外 LED 发出光脉冲(850-940 纳米),光电二极管测量从物体反射的光量。如果反射信号超过阈值 — 物体被视为靠近(小于 3-5 厘米)。
主要技术问题是 太阳光 和其他红外源的干扰。解决方案 — 辐射调制:红外 LED 以 10-100 千赫的频率发射脉冲,光电探测器同步检测信号,滤除直流分量。根据 ams Application Note AN000610 (2024),同步检测方案可将背景光抑制 40-60 分贝。
触发阈值 由制造商在校准阶段设置,取决于屏幕玻璃的透明度。典型阈值 — 反射对应 2-4 厘米的距离。当手指或耳朵距离小于阈值时,传感器返回值 0(靠近),否则返回最大范围值(取决于型号为 8-10 厘米)。
接近传感器(红外接近)测量反射强度 — 具有两种状态的二进制传感器。飞行时间 (ToF) 测量光到物体并返回的飞行时间,从而实现到几米的精确距离确定。在移动设备中,ToF 传感器(STMicroelectronics 的 VL53L5)用于相机自动对焦和增强现实应用。
对于 通话时关闭屏幕 的任务,简单的二进制红外传感器就足够了 — 其成本为 0.10-0.30 美元,而 ToF 模块为 1-3 美元。ToF 传感器增加了精确的测距功能,但对于基本任务来说是多余的。在一些旗舰产品中(Samsung Galaxy S23 Ultra),使用结合两种技术的组合模块。
| 参数 | 红外接近 | ToF 传感器 |
|---|---|---|
| 原理 | 反射强度 | 光飞行时间 |
| 范围 | 0-10 厘米 | 0-400 厘米 |
| 精度 | 0.5 厘米 | 0.1 厘米 |
| 成本 | $0.10-0.30 | $1-3 |
| 用途 | 通话时屏幕 | 自动对焦、AR |
Android 通过 Sensor.TYPE_PROXIMITY 提供对接近传感器的访问。API 的特点是传感器只返回两个实际有效的值:0(物体靠近)和没有物体时的最大范围值(通常为 5-10 厘米)。内部算法隐藏了信号的模拟特性。
传感器的 二进制特性 意味着应用程序无法获得到物体的精确距离 — 只能获得敏感区域内是否存在障碍物的事实。这是硬件限制。要获得更精确的测量,请使用 ToF 传感器(如果可用)通过标准 TYPE_PROXIMITY API,但在具有 ToF 的设备上,它返回模拟值。
val proximitySensor = sensorManager
.getDefaultSensor(Sensor.TYPE_PROXIMITY)
sensorManager.registerListener(
object : SensorEventListener {
override fun onSensorChanged(event: SensorEvent) {
val distance = event.values[0]
val maxRange = proximitySensor?.maximumRange ?: 10f
when {
distance < maxRange -> lockScreen()
else -> unlockScreen()
}
}
override fun onAccuracyChanged(
sensor: Sensor, accuracy: Int
) {}
},
proximitySensor,
SensorManager.SENSOR_DELAY_UI
)
注册接近传感器时,如果应用程序需要在屏幕关闭时继续工作(例如通话录音),使用 SCREEN_OFF_WAKE_LOCK 很重要。没有唤醒锁,CPU 可能会进入休眠模式,传感器数据将停止传入。SENSOR_DELAY_UI(200 毫秒)标志对于大多数场景来说足够。
虽然传感器的主要功能是 通话时关闭屏幕,但开发人员发现了更创造性的用途。Glimmer 应用程序使用接近传感器通过手在屏幕前的运动切换歌曲 — 挥动手掌跳过歌曲。电池充电不受影响:传感器的功耗仅为 0.3-0.7 毫安。
接近传感器的主要问题是使用保护玻璃和外壳时的 误读。一些制造商(Google Pixel 8,2023 年)使用超声波接近传感器代替红外 — 它可以通过任何保护玻璃和任何厚度的屏幕工作,但精度较低且延迟较大(高达 100 毫秒)。厚玻璃(超过 0.5 毫米)会散射红外辐射,导致持续触发。解决方案 — 使用带有传感器精确切口的外壳。第二个缺点 — 无法通过具有可变透明度的 OLED 屏幕(屏下传感器)工作。
2024-2025 年,制造商开始采用 屏下接近传感器,从而将智能手机的上边框缩小到 1-2 毫米。第一款采用屏下接近传感器的量产设备是 Xiaomi 14 Ultra(2024 年),随后是 OnePlus 12 和 Samsung Galaxy S25。该技术使用波长为 940 纳米的红外辐射,可部分穿过 OLED 屏幕的像素。根据 Samsung Display 技术白皮书(2024 年),OLED 对红外辐射的透明度为 15-25% — 足以在屏幕亮度高达 600 坎德拉/平方米时使传感器工作。在更高亮度下,矩阵对红外变得不透明,传感器需要关闭背光 1-2 帧进行测量。
在 Android 上开发应用程序时,模拟器不支持接近传感器 — 需要 通过软件模拟。在物理设备上进行调试时,可以使用 adb 命令:adb shell sendevent /dev/input/eventX 以及相应的 ABS_MT_TOUCH_MAJOR 代码。要在测试中模拟通话期间关闭屏幕,请使用 SensorManager 和 mock 对象,该对象在调用 onSensorChanged 时返回值 0。
要在 Android 设备上检查接近传感器,请打开电话应用程序,拨打 *#0*#(在 Samsung 上)并选择传感器选项。将手指靠近屏幕顶部时,传感器值应从 «Far» 变为 «Near»。如果传感器没有反应 — 擦拭屏幕顶部并检查是否有保护玻璃覆盖传感器。在 iPhone 上,通过设置中的系统诊断进行检查。
常见问题解答
通常问题在于 保护玻璃或外壳 遮挡了接近传感器。确保听筒扬声器旁边的区域没有被阻挡。如果问题出现在裸机上 — 可能是硬件缺陷或传感器污染。
传感器位于 前面板顶部,听筒扬声器旁边。在现代智能手机中,它隐藏在屏幕玻璃下方。用明亮手电筒以一定角度照射可以看到 — 看起来像一个小点或缝隙。
使用 Android 标准工具 — 不可以。但是,有通过工程菜单(在 Samsung 上拨打 *#0*#)进行测试的应用程序。在某些设备上,可以通过服务模式调整灵敏度。
标准接近传感器 API 仅返回 检测事实 — 0 或 maxRange。要获得精确距离,请使用飞行时间传感器(如果设备配备) — 在兼容设备上可通过相同的 TYPE_PROXIMITY 访问。
取决于 玻璃的厚度和材料。薄柔性玻璃(0.15-0.2 毫米)不影响工作。厚钢化玻璃(0.5 毫米以上)可能散射红外辐射并导致误触发。建议使用传感器周围有精确切口或黑色边框的玻璃。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。