获取手机朝向

题外话

如果需要的定位数据不需要精确,比如天气,这种获取城市级别定位的,只需要IP定位即可;

如果对定位的精确度要求比较高,对定位速度也有一定要求,则可以使用设备原生定位,获取GPS传感器数据,比如巡检功能,高德还增加了WIFI定位,通过获取设备所能连接的WIFI已经信号强度等信息,获取大致的位置信息,这个WIFI路由器的位置应该是在高德服务器中保存,根据路由器的MAC地址区分;

如果定位要求极高,对定位速度无要求,则可以使用手持专业设备进行定位,定位速度会慢一些,可能一个点位需要三十秒左右。

这些都是题外话,今天的主题是如何获取设备朝向。

实现

设备的朝向是由 加速度传感器陀螺仪 来测量,具体两个元器件的作用大家可以自行百度下。

由于我是原生开发,所以第一时间是寻找原生代码的解决方案,而且由于项目上在使用高德SDK中提出的新需求,所以第一时间去找了高德官网。

高德方案

官网可参考 高德-定位图标指示方向

Android满足需求,然而iOS端和高德地图有些耦合,所以想寻求另一种方案。

Cordova插件【采纳方案】

可参考Github地址:Github-cordova-plugin-device-orientation

可以正常使用,也是最终采用的方案。

Android端是通过实现 SensorEventListener 接口,并实现 onSensorChanged 方法。

iOS端是通过执行 CLLocationManager 中的 startUpdatingHeading 方法,并在 - (void)locationManager:(CLLocationManager*)manager didUpdateHeading:(CLHeading*)heading 中接收 设备朝向信息。

其实和高德的实现方式也是一致的。

JS API

在安装上面的插件的时候,发现插件警告,显示插件已被废弃,请换用 W3C Api,可参考 https://www.w3.org/TR/2016/CR-orientation-event-20160818/

获取手机朝向_第1张图片

可参考 https://developer.mozilla.org/zh-CN/docs/Web/API/Window/deviceorientation_event

但是发现不太可行,Android端虽然大部分情况返回正常,event.alpha可以返回与正北方的角度差,但是有时候返回的并不准。
而且在iOS端,在 WKWebview 中不能监听到 deviceorientation 事件。

JS api的方式,我不是前端,也没有多做探索,感兴趣的同事可以看下有没有解决方案。

你可能感兴趣的:(移动端,android)