手机上的传感器
手机上的环境传感器,一般包括气压传感器、温度传感器、湿度传感器、光传感器、声音传感器和距离传感器等。气压传感器能通过气压测量,判断手机当前位置的海拔高度,能提高GPS定位的精度,在三星Galaxy Nexus上有配备;温度传感器一方面用来测量气温,判断当前环境是否舒适,一方面也能监测手机内部温度是否异常;而比较普遍的是光传感器和距离传感器,对智能手机来说几乎是标配,并且一般设计位于手机正面上方听筒附近位置。
一.距离传感器
Proximity API
Proximity API是W3C规范中关于距离传感器的一个独立API,为web开发者提供设备与物体之间的距离信息。
该API中定义了两个设备事件deviceproximity和userproximity,前者提供设备与物体之间的距离信息,后者判断是否感应到有物体接近。
//查看浏览器是否支持
if ('ondeviceproximity' in window) {
// 支持返回距离信息,deviceproximity事件提供三个属性:value,min和max
window.addEventListener('deviceproximity', function(event) {
proximityValue.innerHTML = event.value;//value代表设备与设备前物体的距离
proximityMax.innerHTML = event.max; //min和max代表传感器能检测的距离范围,单位是厘米。
proximityMin.innerHTML = event.min;
}
if ('onuserproximity' in window) {
// 支持返回是否有物体靠近,
//userproximity事件有一个属性:near。它探测的范围也是deviceproximity的检测距离范围。
window.addEventListener('userproximity', function(event) {
inProximity.innerHTML = event.near; //near是一个布尔值,代表是否有设备前方是否有物体靠近,默认是false
});
}
二.环境光传感器
Ambient Light API
mbient Light API,W3C规范中关于环境光传感器的一个独立API,为web开发者提供设备感应到的环境光强度的数值。该API最初提供了2个事件监听设备的环境光状况:devicelight和lightlevel。
- devicelight:返回环境光强度的数值,使用勒克斯(lux)照度单位
- lightlevel:描述当前环境光的强度等级————暗淡、正常和明亮。在最新的W3C规范中,已经移除了lightlevel事件,事实上,我们完全可以通过devicelight自己来定义光的强度等级。
if ('ondevicelight' in window) {// 浏览器支持检测
//devicelight事件只有一个value属性,随着测试设备不同可能有不同的返回数值,范围从0到无穷大
window.addEventListener('devicelight', function(event) {
// 获取光强度数值
lightValue.innerHTML = Math.round(event.value);
});
}
例如:根据数值变换网页主题
if (event.value < 50) {
document.body.className = 'dark-theme';
} else if (event.value < 10000) {
document.body.className = 'classic-theme';
} else {
document.body.className = 'light-theme';
}
三.陀螺仪(重力传感器)
deviceorientation API
window.addEventListener("deviceorientation", function(event) {//提供设备的物理方向信息,表示为一系列本地坐标系的旋角。
// 处理event.alpha、event.beta及event.gamma
}, true);
window.addEventListener("devicemotion", function(event) { //加速度信息
// 处理event.acceleration、event.accelerationIncludingGravity、
// event.rotationRate和event.interval
}, true);
四.手机震动
if (vibrateSupport) { //兼容不同的浏览器
navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate;
//在需要的地方 调用navigator.vibrate(3000), 就可以实现手机震动的了(该处震动三秒),同时期支持数组 如 navigator.vibrate.([300,200,300,200,300]),300是表示震动的毫秒数,200表示两次震动的时间间隔。
}
五.温度传感器
devicetemperature API (单位℃)
六.压力传感器
devicepressure API (单位kP)
七.湿度
devicehumidity (单位%)
兼容性



浙公网安备 33010602011771号