Android之GPS定位详解(12页).doc

上传人:1595****071 文档编号:36721764 上传时间:2022-08-28 格式:DOC 页数:12 大小:227.50KB
返回 下载 相关 举报
Android之GPS定位详解(12页).doc_第1页
第1页 / 共12页
Android之GPS定位详解(12页).doc_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《Android之GPS定位详解(12页).doc》由会员分享,可在线阅读,更多相关《Android之GPS定位详解(12页).doc(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-Android之GPS定位详解-第 12 页一、LocationManagerLocationMangager,位置管理器。要想操作定位相关设备,必须先定义个LocationManager。我们可以通过如下代码创建LocationManger对象。LocationManger locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);二、LocationListenerLocationListener,位置监听,监听位置变化,监听设备开关与状态。 privateLocationListen

2、er locationListener=newLocationListener() /* * 位置信息变化时触发 */ publicvoidonLocationChanged(Location location) updateView(location); Log.i(TAG, 时间:+location.getTime(); Log.i(TAG, 经度:+location.getLongitude(); Log.i(TAG, 纬度:+location.getLatitude(); Log.i(TAG, 海拔:+location.getAltitude(); /* * GPS状态变化时触发 */

3、 publicvoidonStatusChanged(String provider,intstatus, Bundle extras) switch(status) /GPS状态为可见时 caseLocationProvider.AVAILABLE: Log.i(TAG, 当前GPS状态为可见状态); break; /GPS状态为服务区外时 caseLocationProvider.OUT_OF_SERVICE: Log.i(TAG, 当前GPS状态为服务区外状态); break; /GPS状态为暂停服务时 caseLocationProvider.TEMPORARILY_UNAVAILAB

4、LE: Log.i(TAG, 当前GPS状态为暂停服务状态); break; /* * GPS开启时触发 */ publicvoidonProviderEnabled(String provider) Location location=lm.getLastKnownLocation(provider); updateView(location); /* * GPS禁用时触发 */ publicvoidonProviderDisabled(String provider) updateView(null); ;三、LocationLocation,位置信息,通过Location可以获取时间、经

5、纬度、海拔等位置信息。上面采用locationListener里面的onLocationChanged()来获取location,下面讲述如何主动获取location。Location location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 注意:Location location=new Location(LocationManager.GPS_PROVIDER)方式获取的location的各个参数值都是为0。四、GpsStatus.ListenerGpsStatus.Listener ,GPS

6、状态监听,包括GPS启动、停止、第一次定位、卫星变化等事件。 /状态监听 GpsStatus.Listener listener =newGpsStatus.Listener() publicvoidonGpsStatusChanged(intevent) switch(event) /第一次定位 caseGpsStatus.GPS_EVENT_FIRST_FIX: Log.i(TAG, 第一次定位); break; /卫星状态改变 caseGpsStatus.GPS_EVENT_SATELLITE_STATUS: Log.i(TAG, 卫星状态改变); /获取当前状态 GpsStatus g

7、psStatus=lm.getGpsStatus(null); /获取卫星颗数的默认最大值 intmaxSatellites = gpsStatus.getMaxSatellites(); /创建一个迭代器保存所有卫星 Iterator iters = gpsStatus.getSatellites().iterator(); intcount = 0; while(iters.hasNext() & count = maxSatellites) GpsSatellite s = iters.next(); count+; break; /定位启动 caseGpsStatus.GPS_EVEN

8、T_STARTED: Log.i(TAG, 定位启动); break; /定位结束 caseGpsStatus.GPS_EVENT_STOPPED: Log.i(TAG, 定位结束); break; ; ;/绑定监听状态lm.addGpsStatusListener(listener);五、GpsStatusGpsStatus,GPS状态信息,上面在卫星状态变化时,我们就用到了GpsStatus。/实例化 GpsStatus gpsStatus = locationManager.getGpsStatus(null);/获取当前状态 /获取默认最大卫星数 intmaxSatellites =

9、gpsStatus.getMaxSatellites(); /获取第一次定位时间(启动到第一次定位) intcostTime=gpsStatus.getTimeToFirstFix(); /获取卫星 Iterable iterable=gpsStatus.getSatellites(); /一般再次转换成Iterator Iterator itrator=iterable.iterator();六、GpsSatellite GpsSatellite,定位卫星,包含卫星的方位、高度、伪随机噪声码、信噪比等信息。 /获取卫星 Iterable iterable=gpsStatus.getSatel

10、lites(); /再次转换成Iterator Iterator itrator=iterable.iterator(); /通过遍历重新整理为ArrayList ArrayList satelliteList=newArrayList(); intcount=0; intmaxSatellites=gpsStatus.getMaxSatellites(); while(itrator.hasNext() & count = maxSatellites) GpsSatellite satellite = itrator.next(); satelliteList.add(satellite);

11、 count+; /输出卫星信息 for(inti=0;isatelliteList.size();i+) /卫星的方位角,浮点型数据 /卫星的高度,浮点型数据 /卫星的伪随机噪声码,整形数据 /卫星的信噪比,浮点型数据 /卫星是否有年历表,布尔型数据 /卫星是否有星历表,布尔型数据 /卫星是否被用于近期的GPS修正计算 为了便于理解,接下来模拟一个案例,如何在程序代码中使用GPS获取位置信息。第一步:新建一个Android工程项目,命名为mygps,目录结构如下第二步:修改main.xml布局文件,修改内容如下: 第三步:实用Adnroid平台的GPS设备,需要添加上权限 uses-perm

12、issionandroid:name uses-permissionandroid:name第四步:修改核心组件activity,修改内容如下packageimportimportimportimportimportimportimportimportimportimportimportimportimportimportimportimportpublicclassGpsActivityextendsActivity privateEditText editText; privateLocationManager lm; privatestaticfinalString TAG=GpsAct

13、ivity;Overrideprotected void onDestroy() / TODO Auto-generated method stubsuper.onDestroy();lm.removeUpdates(locationListener); Override publicvoidonCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE); /判断GPS是否正常启动 if(!

14、lm.isProviderEnabled(LocationManager.GPS_PROVIDER) Toast.makeText(this, 请开启GPS导航., Toast.LENGTH_SHORT).show(); /返回开启GPS导航设置界面 Intent intent =newIntent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivityForResult(intent,0); return; /为获取地理位置信息时设置查询条件 String bestProvider = lm.getBestProvider(getCr

15、iteria(),true); /获取位置信息 /如果不设置查询要求,getLastKnownLocation方法传人的参数为LocationManager.GPS_PROVIDER Location location= lm.getLastKnownLocation(bestProvider); updateView(location); /监听状态 lm.addGpsStatusListener(listener); /绑定监听,有4个参数 /参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种 /参数2,位置信息更新周期,单位毫秒 /参数3,位置变化最小距离:当

16、位置距离变化超过此值时,将更新位置信息 /参数4,监听 /备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新 /1秒更新一次,或最小位移变化超过1米更新一次; /注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置 lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, locationListener); /位置监听 privateLocation

17、Listener locationListener=newLocationListener() /* * 位置信息变化时触发 */ publicvoidonLocationChanged(Location location) updateView(location); Log.i(TAG, 时间:+location.getTime(); Log.i(TAG, 经度:+location.getLongitude(); Log.i(TAG, 纬度:+location.getLatitude(); Log.i(TAG, 海拔:+location.getAltitude(); /* * GPS状态变化

18、时触发 */ publicvoidonStatusChanged(String provider,intstatus, Bundle extras) switch(status) /GPS状态为可见时 caseLocationProvider.AVAILABLE: Log.i(TAG, 当前GPS状态为可见状态); break; /GPS状态为服务区外时 caseLocationProvider.OUT_OF_SERVICE: Log.i(TAG, 当前GPS状态为服务区外状态); break; /GPS状态为暂停服务时 caseLocationProvider.TEMPORARILY_UNA

19、VAILABLE: Log.i(TAG, 当前GPS状态为暂停服务状态); break; /* * GPS开启时触发 */ publicvoidonProviderEnabled(String provider) Location location=lm.getLastKnownLocation(provider); updateView(location); /* * GPS禁用时触发 */ publicvoidonProviderDisabled(String provider) updateView(null); ; /状态监听 GpsStatus.Listener listener =

20、newGpsStatus.Listener() publicvoidonGpsStatusChanged(intevent) switch(event) /第一次定位 caseGpsStatus.GPS_EVENT_FIRST_FIX: Log.i(TAG, 第一次定位); break; /卫星状态改变 caseGpsStatus.GPS_EVENT_SATELLITE_STATUS: Log.i(TAG, 卫星状态改变); /获取当前状态 GpsStatus gpsStatus=lm.getGpsStatus(null); /获取卫星颗数的默认最大值 intmaxSatellites = gpsStatus.getMaxSatellites(); /创建一个迭代器保存所有卫星 Iterator iters = gpsStatus.getSatellites().iterator(); intcount = 0; while(iters.hasNext() & count Location Controls-Manual-选中Decimal-输入经纬度,类似如下演示效果如下:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁