2013-03-12 105 views
1

我想要制作一个准确的基于位置的应用程序,但我对的工作原理有点困惑。Android位置更新

  1. 如果我把requestlocationUpdates(LocationManager.GPS_PROVIDER, ,);作为位置提供商,我测试我的应用程序。我看到,如果我没有启用gps,它会从网络获取更新,并在其启用时从gps获取更新。如果网络和gps提供商自行切换发送更新,那么它有什么意义?

  2. requestlocationUpdates的第三个参数是如何工作的?我的意思是说它改变了我设定的距离,但它如何检测到我已经移动了?

回答

0

你可以用下面的代码

Criteria criteria = new Criteria(); 
String provider = locationManager.getBestProvider(criteria, false); 
Location location = locationManager.getLastKnownLocation(provider); 

,其中标准是表示选择位置提供应用标准一类尝试。供应商可根据准确性,用电量,报告海拔高度,速度和方位以及货币成本的能力进行订购。

然后

locationManager.requestLocationUpdates(provider,0, 0, new MyLocationListener()); 

其中第二和第三个参数是使用以使你可以控制,你的听众接受第二和第三个参数的第二更新的频率是通知之间的最短时间间隔第三个是通知间距离的最小变化 - 尽可能频繁地将零请求位置通知设置为零。

+0

感谢您的回复,但我的问题是,你写我的代码我把它放在onResume方法,所以如果我的标准最好的提供者是GPS,但它是不可用的应用程序将如何选择网络提供者自己并在GPS可用时更改。我必须自己检查一下吗?至于第二个问题,我的问题是,它如何检测到我已经超过了我的智力参数?这意味着它计数所有的米? – user2065529 2013-03-12 12:12:16

+0

根据您的第一个问题locationManager.getBestProvider将为您提供最佳提供商,即gps或网络。你不必做任何事情。 – 2013-03-12 12:19:53

+0

是的,但如果我的系统选择了GPS例如,但它变得不可用它会改变到网络本身? – user2065529 2013-03-12 12:27:41

0
  1. 记住,一旦你requestLocationUpdates(...)表示onLocationChanged(...)时指定供应商启用将被触发,你会得到onLocationChanged方法的最新坐标。在检测到任何新位置之前,系统将会使用默认位置(即Cache位置或LastKnownLocation)。

  2. 当然,如果当前位置与您之前的位置(缓存位置)不同,系统会认为您正在移动。