【转发】手机定位模式(基站定位、WIFI定位、GPS定位)
2012-12-05 11:07
1751 查看
通过Android手机上的定位信息来源可分为三种,GPS,Cell-ID,和Wifi. 后两种因为都按来自于网络,所以在Android SDK中统一为基于网络的定位。目前三种定位方式都不够完善,各有优缺点。
基于GPS信号的定位在三者中精度较高,但是缺点是当前民用的GPS信号在建筑物内的信号比较差,而且GPS模块启动的时间也比较慢,它的工作原理其实是搜索附近的4颗卫星,根据当前位置到这四颗卫星的距离来定位,GPS模块找到四颗卫星(也称之为GPS的启动过程)根据信号强度和地域的不同有可能需要几分钟的时间;基于基站和Wifi的定位在Android API中被统一称为网络定位,开发者无法将两者区分开来,他们的特点是速度快,但是精度不如GPS高。我们也常常听说到AGPS定位算法,是结合了两种算法的优点,首先根据网络的快速定位来获得一个大致位置,然后根据这个位置去帮助GPS模块快速地搜索到附近的卫星。这是目前通过的效果较好的方式。下面仅仅介绍如何进行基本的GPS定位和网络定位。
在开始定位之前首先要获得LocationManager,然后根据可以根据一定的规则去选择一个定位方法,代码如下,
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
选择定位算法的规则:
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE); //设置为最大精度
criteria.setAltitudeRequired(false); //不要求海拔信息criteria.setCostAllowed(true); //是否允许付费
criteria.setPowerRequirement(Criteria.POWER_LOW); //对电量的要求
criteria.setBearingRequired(false); //不要求Bearing信息
关于Bearing的解释,请查看Bearing释疑
//根据上述法则选择一个定位方法
bestProvider = locationManager.getBestProvider(criteria, false);
//通常我们为了提高用户体验,我们先把上次定位的结果缓存下来,
//在启动先打开上次定位结果,称为last known location
Location location = locationManager.getLastKnownLocation(bestProvider);
//接下来我们在Activity的显示界面的函数OnResume中启动定位的位置更新
locationManager.requestLocationUpdates(bestProvider, 2000, 1, this);
//并且在OnPause函数中关闭
locationManager.removeUpdates(this);
// 让当前Activity实现LocationListener端口,在onLocationChanged函数获得定位信息
public void onLocationChanged(Location location) {
Log.d(TAG, "Latitude :" + location.getLatitude());
Log.d(TAG, "Longitude :" + location.getLongitude());
}
//最近记得在AndroidMenifest.xml文件中赋于定位的权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
基于GPS信号的定位在三者中精度较高,但是缺点是当前民用的GPS信号在建筑物内的信号比较差,而且GPS模块启动的时间也比较慢,它的工作原理其实是搜索附近的4颗卫星,根据当前位置到这四颗卫星的距离来定位,GPS模块找到四颗卫星(也称之为GPS的启动过程)根据信号强度和地域的不同有可能需要几分钟的时间;基于基站和Wifi的定位在Android API中被统一称为网络定位,开发者无法将两者区分开来,他们的特点是速度快,但是精度不如GPS高。我们也常常听说到AGPS定位算法,是结合了两种算法的优点,首先根据网络的快速定位来获得一个大致位置,然后根据这个位置去帮助GPS模块快速地搜索到附近的卫星。这是目前通过的效果较好的方式。下面仅仅介绍如何进行基本的GPS定位和网络定位。
在开始定位之前首先要获得LocationManager,然后根据可以根据一定的规则去选择一个定位方法,代码如下,
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
选择定位算法的规则:
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE); //设置为最大精度
criteria.setAltitudeRequired(false); //不要求海拔信息criteria.setCostAllowed(true); //是否允许付费
criteria.setPowerRequirement(Criteria.POWER_LOW); //对电量的要求
criteria.setBearingRequired(false); //不要求Bearing信息
关于Bearing的解释,请查看Bearing释疑
//根据上述法则选择一个定位方法
bestProvider = locationManager.getBestProvider(criteria, false);
//通常我们为了提高用户体验,我们先把上次定位的结果缓存下来,
//在启动先打开上次定位结果,称为last known location
Location location = locationManager.getLastKnownLocation(bestProvider);
//接下来我们在Activity的显示界面的函数OnResume中启动定位的位置更新
locationManager.requestLocationUpdates(bestProvider, 2000, 1, this);
//并且在OnPause函数中关闭
locationManager.removeUpdates(this);
// 让当前Activity实现LocationListener端口,在onLocationChanged函数获得定位信息
public void onLocationChanged(Location location) {
Log.d(TAG, "Latitude :" + location.getLatitude());
Log.d(TAG, "Longitude :" + location.getLongitude());
}
//最近记得在AndroidMenifest.xml文件中赋于定位的权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
相关文章推荐
- 浅析手机定位---GPS、基站、AGPS、WIFI
- 手机基站定位异常解决方案
- 谷歌手机地图支持三角基站定位
- 如何把Android手机变成一个WIFI下载热点? — 报文转发及DNS报文拦截
- Android附近基站+Wifi+IP+GPS多渠道定位方案
- 在Android里完美实现基站和WIFI定位
- 关于利用SIM908 工程模式中的cellid lac 参数值进行基站定位(Sim900和sim908不一样,sim908没有直接读取基站定位信息的指令)
- android基站和wifi定位
- 以WIFI模式调试Android手机
- 多基站wifi混合定位
- 多基站wifi混合定位
- ym——Android从零开始(34)(基站、wifi、GPS定位)(新)
- Android获取手机基站信息并进行基站定位(基站定位原理)
- 手机是如何通过基站/WIFI接入互联网的
- <WIFI>在soft-AP模式下实现配置UDP实验——手机点灯
- android GPS定位,基站定位,WIFI定位开关的控制
- 基站定位数据库(简单的手机基站定位数据获取)
- 多基站wifi混合定位
- Android基站定位——通过手机信号获取基站信息(一)
- 电脑上安装的android虚拟机,能进行基站定位和GPS定位吗?要怎么做才能定位?(转)