您的位置:首页 > 移动开发 > Android开发

Android 定位

2014-04-10 13:58 218 查看
这几天系统看了下android 定位相关的资料,现将相关内容总结如下:

一 目前常用定位方式:

1GPS

GPS定位利用高空中的GPS卫星,向地面发射L波段的载频无线电测距信号,由地面上用户接收机实时地连续接受,并计算出接收机无线所在位置。GPS是获取室外环境信息的最常用方式。通过太空中的GPS卫星,地面的控制站和用户手中的GPS接收器,就能定位用户在地球上的位置和海拔坐标。接收的卫星越多,数据就越精确。GPS定位特点是精度高,耗电大,适合室外使用。

AndroidLocationManager服务提供了获取定位信息的方法。

mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

Location location =mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

Location 里面就包含了经度,纬度等信息。

2 WIFI

通过WIFI信息进行定位,并不需要真正连接上指定的WIFI路由器,只需要探测到有WIFI存在即可,必须要拿到WIFI路由器的SSID和信号强度。定位前,客户端将扫描到的信号强度存储在服务器数据库上。定位时,将客户端采集到的信号强度与服务器已有的信号强度进行匹配,从而实现定位。

AndroidWifiManager 服务提供了相应的方法可以获取周边的wifi路由器信息,包括接入点地址,信号强度等。

WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);

List<ScanResult> scanList =wifiManager.getScanResults(); //获取周边路由器信息列表

把这些信息传服务器,服务器通过一定的算法或匹配规则,返回定位信息。

3 基站

基站定位是基于运营商的GSM网络(或其他电信运营商的网络)进行定位的。GSM网络的基础结构是由一系列的蜂窝基站构成的,这些蜂窝基站把整个通信区域划分成一个个蜂窝小区,每个基站都有一个唯一的cellId。一般有几种方法,第一种是利用手机附近的三个基站进行三角定位,由于每个基站的位置是固定的,利用电磁波在这三个基站间中转所需要时间来算出手机所在的坐标;第二种则是利用获取最近的基站的信息,其中包括cell id,location area code、mobile country code、mobile network
code和信号强度。将这些数据发送到google的定位web服务里,就能拿到当前所在的位置信息。

AndroidTelephonyManager 服务提供了相应的方法获取周边的基站信息。

TelephonyManager telephonyManager =(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

List<NeighboringCellInfo> infoList =telephonyManager.getNeighboringCellInfo();//获取周边基站信息列表

二 关于定位的一些想法

1 控制GPS 定位频率, GPS定位相对来说耗电量比较大,需要做适当的缓存。在满足需求的情况下,尽量加大定位时间间隔。

2 定位作为公用模块,代码应该尽量内聚,减小模块间耦合。

3 定位功能该如何测试,由于地理位置限制,目前测试还仅限于通过观察日志,无法模拟实际定位场景。这样测试有可能遗漏。本想通过模拟gps位置来测试,但是基站信息和wifi信息不好模拟。一个不错的办法是定位结合GPS 和 网络信息,这样可以通过mock 基站和wifi信息的http请求来测试客户端功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: