2013-03-10 66 views
3

我正试图实现一个应用程序,它可以从GPS和网络提供商处感知位置,并在Google地图上显示它。我成功地做到了这一点,但我有一个问题: 我得到的供应商在我的活动的OnCreate()(它扩展了LocationListener的)Android。如何知道检测到的位置是来自GPS还是网络提供商

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
Criteria criteria = new Criteria(); 
provider = locationManager.getBestProvider(criteria, false); 
location = locationManager.getLastKnownLocation(provider); 

它工作正常,我的问题是,当onLocationChange()是所谓的,如果提供者称之为GPS或NETWORK,我应该采取不同的行动。有没有办法知道哪个? 要更加清楚:

当调用onLocationChanged(Location location)时,是否有机会知道哪个提供者发起了呼叫?我曾尝试在提供程序字符串上使用if,但它似乎不起作用。

回答

1

您是否需要了解位置提供商(GPS,WIFI或网络)或其准确性?

getAccuracy()

得到这个位置的估计精度,以米为单位。

我们将精度定义为68%置信度的半径。换句话说,如果您绘制一个以该位置的经度和纬度为中心的圆,其半径等于精度,则真实位置在圆内的概率为68%。

如果你真的关心供应商,你可以使用isProviderEnabled()

+0

谢谢。我见过isProviderEnabled(),我的问题是他们都启用!我应该知道哪个提供商为了做不同的事情而设置了位置,如果它是GPS或NETWORK。 – user2153669 2013-03-10 12:18:56

+0

您应该在这里看到详细的答案:http://stackoverflow.com/questions/2021176/how-can-i-check-the-current-status-of-the-gps-receiver – 2013-03-10 12:23:16

1

检查精度< =30米:

boolean isGPS = (location.getAccuracy() <= 30); 
+0

谢谢。我发现有一个方法(location.getProvider())似乎做我想要的...我会让你知道的! – user2153669 2013-03-10 14:48:35

0

我想你想知道哪个供应商提供的最后位置更新.....

u必须创建提供商作为一个字符串只需要使用字符串代码如 if(provider.matches(“GPS”)){}

相关问题