2011-04-19 55 views
1

从下面的代码中,我得到当前位置。Android位置管理器问题

Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
criteria.setAltitudeRequired(false); 
criteria.setBearingRequired(false); 
criteria.setCostAllowed(true); 
criteria.setPowerRequirement(Criteria.POWER_LOW); 
String provider = locationManager.getBestProvider(criteria, true); 
GlobalLocation = locationManager.getLastKnownLocation(provider); 
locationManager.requestLocationUpdates(provider, 2000, 10, locationListener); 

获取位置后,我吸取谷歌地图的位置重叠,并从位置提供我决定位置重叠的颜色。以下代码决定了位置提供程序的基础上的颜色。

Serviceprovider = GlobalLocation.getProvider(); 
    if(Serviceprovider.equals("network")) 
    { 
     positionOverlay.iColor = 2; 
    }//End if 
    else if(Serviceprovider.equals("gps")) 
    { 
     positionOverlay.iColor = 1; 
    }//End else if 

一切工作正常室外,但问题是,如果我使用我的应用程序室内GPS不稳定。提供商不使用network。网络提供商仅在GPS关闭时执行。你能否引导我,如果GPS不稳定,我该如何决定网络上的跳跃。

回答

3

这已被回答。您需要添加两个不同的位置侦听器。一个用于GPS,一个用于网络位置。基于蜂窝网络的位置监听器。

GPS只能在室外工作,但蜂窝网络可以在任何有信号的地方工作,但它不像GPS那么精确。

locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
      locationListener = new MyLocationListener(); 
      locationListener2 = new MyLocationListener();    
      locationManager.requestLocationUpdates(locationManager.GPS_PROVIDER, 0, 0, locationListener); 
      locationManager.requestLocationUpdates(locationManager.NETWORK_PROVIDER, 0, 0, locationListener2); 
+0

我怎么能决定哪个提供商提供的位置? – Siddiqui 2011-04-19 05:34:43

+0

@Arman你基本上都添加了两个听众,其中一个会选择你的位置。里诺的回答有一个很好的指导。一探究竟。 – Hades 2011-04-19 06:03:05

1

当你得到一个解决方法,使用Location.getProvider()知道使用了哪个供应商。

使用此elaborate article来决定哪个LocationProvider是最好的。