实现Android的不同精度的定位(基于网络和GPS)

解决方案:

Android中的定位服务的相关类基本上都在android.location包中,其中位置服务管理器(LocationManager)提供了定位功能所需要的API,下面是实现定位方法的关键部分:
1、实例化位置服务管理器的方法如下:
//变量定义
private LocationManager locationManager;
//得到LocationManager
locationManager = (LocationManager) this
.getSystemService(Context.LOCATION_SERVICE);
2、开启位置服务的监听
有了LocationManager之后,我们就可以开始监听位置的变化了。我们使用LocationManager中的方法:
locationManager.requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) 
(上述参数说明:
Parameters
provider the name of the provider with which to register
minTime the minimum time interval for notifications, in milliseconds. This field is only used as a hint to conserve power, and actual time between location updates may be greater or lesser than this value.
minDistance the minimum distance interval for notifications, in meters
listener a {#link LocationListener} whose onLocationChanged(Location) method will be called for each location update)
来设置监听器。注意到第1个参数,这个参数的值为2选1,分别是:
LocationManager.NETWORK_PROVIDER
LocationManager.GPS_PROVIDER
前者用于移动网络中获取位置,精度较低但速度很快,后者使用GPS进行定位,精度很高但一般需要10-60秒时间才能开始第1次定位,如果是在室内则基本上无法定位。
开启位置改变监听代码:
private LocationListener gpsListener=null;
private LocationListener networkListner=null;
private void registerLocationListener(){
networkListner=new MyLocationListner();
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 3000, 0, networkListner);
gpsListener=new MyLocationListner();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, gpsListener);
}
通过getLastKnownLocation(String provider)传对应参数,此时得到的Location并非当前的GPS位置信息,而是上一次获取到的位置信息,而requestLocationUpdates才是真正去请求位置信息的更新。
3、位置查询条件如精度等的设置方法
private Criteria getCriteria(){
Criteria criteria=new Criteria();
//设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细 
criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度
//设置是否要求速度
criteria.setSpeedRequired(false);
// 设置是否允许运营商收费 
criteria.setCostAllowed(false);
//设置是否需要方位信息
criteria.setBearingRequired(false);
//设置是否需要海拔信息
criteria.setAltitudeRequired(false);
// 设置对电源的需求 
criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗
return criteria;
}
4、停止位置改变监听
只需要调用LocationManager对象的removeUpdates(LocationListener listener)方法就可以停止监听。

参考链接:
http://blog.sina.com.cn/s/blog_74c22b210100sfix.html
http://fzlihui.iteye.com/blog/713050
http://www.learningandroid.net/blog/foundation/tutorial-location-service/
http://www.cnblogs.com/jh5240/archive/2012/09/08/2676863.html

时间: 2024-11-25 21:35:23

实现Android的不同精度的定位(基于网络和GPS)的相关文章

【Android架构篇】之定位数据如何从GPS芯片到应用层(一)

Android:V4.2.2 Source Insight 写在前面 在漫长的Android源码编译等待过程中,想起之前写过一部分的Android定位实现的探究小品,于是继续探究. 注:代码都是片段化的代码,用来提纲挈领的说明问题. 定位的基础知识: 1.定位芯片和CPU之间通过串口进行通信 2.串口和CPU之间传输的是ASCII格式的NMEA(National Marine Electronics Association)信息,如: $GPGGA,092204.999,4250.5589,S,

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

       前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Interest)搜索.该篇讲述定位当前自己的位置及使用getLastKnownLocation获取location总时为空值的问题. 一. 定位当前位置的原理及实现       定位当前位置可以通过LBS(Location Based Service,基于位置的服务),主要工作原理是利用无线网络Network或GPS定

Android漫游记(3)---重定位之GOT & PLT & R_ARM_JUMP_SLOT

Android系统的动态链接工具是/system/bin/linker(一般的Linux系统是ld.so),虽然名字不同,但是基本的动态链接过程是类似的.需要注意的一点是,Linux一般是Lazy,即所谓的"懒"加载方式,但是Android系统有点区别,是非Lazy方式,即所有的重定位操作,在进程首次执行以前已经全部完成.这大概也是Android应用首次启动比较慢的原因之一吧! 关于Android系统的PLT和GOT可以写上一篇高考作为,在这里就不提概念性的东西了,网上有一篇博文:ht

Android基础入门教程——3.2 基于回调的事件处理机制

Android基础入门教程--3.2 基于回调的事件处理机制 标签(空格分隔): Android基础入门教程 本节引言 在3.1中我们对Android中的一个事件处理机制--基于监听的事件处理机制进行了学习,简单的说就是 为我们的事件源(组件)添加一个监听器,然后当用户触发了事件后,交给监听器去处理,根据不同的事件 执行不同的操作;那么基于回调的事件处理机制又是什么样的原理呢?好吧,还有一个问题:你知道 什么是方法回调吗?知道吗?相信很多朋友都是了解,但又说不出来吧!好了,带着这些疑问我们 对a

无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

Android与服务器端数据交互(基于SOAP协议整合android+webservice)

此文出自:http://www.cnblogs.com/zhangdongzi/archive/2011/04/19/2020688.html 上一节中我们通过http协议,采用HttpClient向服务器端action请求数据.当然调用服务器端方法获取数据并不止这一种.WebService也可以为我们提供所需数据, 那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起. 我们在PC机器java客

Android中的权限管理(基于Permission ProtectionLevel)

1.什么是protectionlevel呢? 我们经常在AndroidManifest中使用权限,如果我们想让应用程序可以发短信,那么应该这样写: <uses-permission android:name="android.permission.SEND_SMS" /> 那么这个权限的定义是在哪里定义的呢?如下: frameworks/base/core/res/AndroidManifest.xml <permission android:name="a

Android应用源码带定位和密码找回的锁屏项目

Android应用源码带定位和密码找回的锁屏项目 首先这是个锁屏的应用项目源码,并且有录制手势的功能不过与传统的九宫格不一样,即使源码里面有注释但是至今我也没有弄明白他的手势录制方法, 项目里面貌似还用到了GPS和五次解锁失败就会向指定手机号发送短信,不过我没有细看,源码有比较详细的注释,正在研究锁屏的朋友不要错过,本项目默认编译版本4.4.2编码GBK. 下载地址:http://www.devstore.cn/code/info/173.html    

cordova开发中,android端利用百度sdk定位。

原文在此,感谢作者http://snoopyxdy.blog.163.com/blog/static/601174402014420872345/ 近期的一个phonegap项目把我做的焦头烂额,最让人蛋疼的就是安卓4.1.x对html5的定位获取经纬度有个无比巨大的坑,一般我们利用如下代码进行html5的定位 navigator.geolocation.getCurrentPosition(function(pos){               alert(JSON.stringify(po