当前位置: 首页 > 科技观察

下面说一下手机上的环境传感器以及W3C中相关的API

时间:2023-03-12 09:08:37 科技观察

环境传感器,一般包括气压传感器、温度传感器、湿度传感器、光线传感器、声音传感器和距离传感器。气压传感器可以通过气压测量判断手机当前所在位置的海拔高度,可以提高GPS定位的准确性。它配备在三星GalaxyNexus上;温度传感器一方面用于测量空气温度,判断当前环境是否舒适,另一方面也可以监测手机内部温度是否异常;比较常见的是光线传感器和距离传感器,几乎是智能手机的标配,一般都设计在手机正面上方靠近听筒的位置。距离传感器和环境光传感器距离传感器由红外LED灯和红外辐射光探测器组成。距离传感器之所以位于手机听筒附近,主要原因是当手机靠近耳朵时,系统通过距离传感器知道用户正在通话,然后关闭显示防止用户误操作影响通话。距离传感器利用“飞行时间”原理来检测到物体的距离,这是通过发射特别短的光脉冲和被物体反射回来所花费的时间来计算的。手机的光传感器,即环境光传感器,可感应设备周围的光线条件。手机操作系统利用光传感器的数据自动调节显示屏的亮度——当环境亮度较高时,显示屏亮度会相应提高;当环境亮度较低时,显示亮度会相应降低。自动亮度一方面保证了手机在不同环境下的读屏体验,另一方面降低了功耗,最大限度地延长了设备的工作时间。ProximityAPIProximityAPI是W3C规范中针对距离传感器的独立API,为Web开发者提供设备与物体之间的距离信息。基于设备的距离信息,我们能做的不仅仅是在通话过程中关闭屏幕。我在手机网页上播放音乐时可以不触屏暂停音乐。我也可以玩梦幻魔法之类的手机网页游戏。一般控制角色的进退...API定义了两个设备事件deviceproximity和userproximity。前者提供设备与物体的距离信息,后者判断是否有物体靠近。看看当前浏览器是否支持:if('ondeviceproximity'inwindow){//支持返回距离信息}if('onuserproximity'inwindow){//支持返回物体是否靠近}deviceproximity事件提供三个属性:value,最小值和最大值。value表示设备与设备前方物体之间的距离,min和max表示传感器可以检测到的距离范围,单位为厘米。if('ondeviceproximity'inwindow){window.addEventListener('deviceproximity',function(event){proximityValue.innerHTML=event.value;proximityMax.innerHTML=event.max;proximityMin.innerHTML=event.min;});}userproximity事件有一个属性:近。一个布尔值,代表设备前方是否有物体靠近,默认为false。它检测的范围也是deviceproximity的检测距离范围。if('onuserproximity'inwindow){window.addEventListener('userproximity',function(event){inProximity.innerHTML=event.near;});}通过以上两个事件,我们可以感知到设备与设备之间的距离信息object,通过绑定网页元素的控制事件,实现网页上不触屏的手势交互。AmbientLightAPIAmbientLightAPI是W3C规范中针对环境光传感器的独立API,为Web开发者提供设备感知的环境光强度值。API最初为设备的环境光状态提供了两个事件监听器:devicelight和lightlevel。前者返回环境光强度值,使用勒克斯(lux)照度单位;后者描述了当前环境光的强度级别——暗、正常和明亮。在最新的W3C规范中,lightlevel事件已被删除。其实我们完全可以通过devicelight本身来定义光的强度等级。if('ondevicelight'inwindow){//浏览器支持检测window.addEventListener('devicelight',function(event){//获取光照强度值lightValue.innerHTML=Math.round(event.value);});}devicelight事件只有一个value属性,根据测试设备的不同可能有不同的返回值,范围从0到无穷大。基于这个环境光强度,我们可以自动切换网页中的夜间主题,尽量减缓用户因网页阅读而造成的眼睛疲劳。为了观察这个值在不同环境下的变化,我们设置了两个主题变化的分界点:50lux和10000lux,所以有:if(event.value<50){document.body.className='dark-theme';}elseif(event.value<10000){document.body.className='classic-theme';}else{document.body.className='light-theme';}不仅如此,在页游中,我们可以Intensity,搭配不同的主题场景作为游戏背景,烘托环境氛围,强化游戏的真实代入感。兼容性不幸的是,目前只有firefox在桌面和移动浏览器中支持ProximityAPI和AmbientLightAPI,桌面版本对AmbientLightAPI的支持仅限于MacOSX。[图1.2ProximityAPI支持][图1.3AmbientLightAPI支持]