- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
相机中使用GPS和网络定位获取用户拍照时的地理位置-CSDNCode平台
相机中使用定位服务获取拍照时的地理位置
M厂产品软件部 邹建敏
一、基础知识
现代智能手机的一个重要功能就是定位,当用户在使用相机拍照时如果能够记录当前照片拍摄时的地理位置信息,并且按照不同的地理位置把照片分成不同的文件夹,对于喜欢旅游和拍照的用户来说这是一个很好的体验。在Android手机中通过定位获取地理位置一般有以下几种方式:
GPS或AGPS:使用GPS定位需要在室外使用,在室内是接受不到GPS卫星信号,也当然不能定位。GPS使用一个卫星群将地点和时间数据从太空直接发送到你的手机上。如果手机接收来自3个卫星的信号,那么它可以显示你在地图上的方位,如果手机可以接收4个卫星的信号,它还可以显示出你的海拔。在室内由于接受不到GPS卫星信号,可以使用AGPS(辅助GPS)定位,它的原理和GPS定位的不同点在于AGPS是通过使用数据网络(GPRS、3G等)或者Wi-Fi向GPS卫星发送定位数据,所以使用AGPS需要网络支持,而GPS不需要网络。
基站定位:由于运营商的每个基站都有确定的编号和位置,运营商可以根据用户当前使用的基站与周围基站的距离来确定用户的当前的位置,所以基站定位在基站分布密集的城市定位更精确。
Wi-Fi定位:原理与基站定位相同,主要区别在于Wi-Fi定位使用的是用户当前接入点的位置,由于Wi-Fi的覆盖区域更小,所以它的精确度更高。
后两种定位方式由于需要网络的支持,所以在Android SDK中统一为基于网络的定位即网络定位。
如何使用定位服务获取地理位置
在Android手机的应用中使用定位服务,一般有以下几个步骤:下面结合11071项目相机中GPS定位和网络定位来了解在手机应用中怎么获取当前的地理位置。
获取定位服务的LocationManager
//定义LocationManager对象
private LocationManager mLocationManager = null;
//通过getSystemService()方法获取LocationManager
if (null == mLocationManager) {
mLocationManager = (LocationManager)getSystemService(
Context.LOCATION_SERVICE);
}
实现监听器的接口(android.location.LocationListener),其中有些重要的变量和函数如下:
//实现接口的内部类变量
Location mLastLocation; //定义Location对象
String mProvider; //获取Location的Provider
boolean mValid = false; //标志获取的Location是否有效
//内部类的构造函数,需要参数provider,provider一般有两种: LocationManager.GPS_PROVIDER和LocationManager.NETWORK_PROVIDER
public LocationListener(String provider) {
mProvider = provider; //设置provider(定位方式)
mLastLocation = new Location(mProvider); //创建Location对象
}
//当获取到新位置或者位置发生变化时调用,
public void onLocationChanged(Location newLocation) {
//判断获取到的位置是否合法
if (newLocation.getLatitude() == 0.0
newLocation.getLongitude() == 0.0) {
return;
}
//当获取到的位置合法时,通过Location的set()方法更新位置
mLastLocation.set(newLocation);
mValid = true;
}
//获取当前最新的位置对象,首先判断当前的Location是否合法,如果合法则返回Location对象,否则返回Null
//定义LocationListener对象
3、开启位置服务监听,使用方法startReceivingLocationUpdates(),如下所示:
protected void startReceivingLocationUpdates() {
CameraLog.v(TAG,
文档评论(0)