2010-05-27 48 views
13

我有这样的代码,以获得最好的供应商Android开位置

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

locationListener = new MyLocationListener(); 
Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
String provider = lm.getBestProvider(criteria, true); 
Location mostRecentLocation = lm.getLastKnownLocation(provider); 
if(mostRecentLocation != null) { 
    latid=mostRecentLocation.getLatitude(); 
    longid=mostRecentLocation.getLongitude(); 
} 
lm.requestLocationUpdates(provider, 1, 0, locationListener); 

,然后听众

private class MyLocationListener implements LocationListener { 

@Override 
public void onLocationChanged(Location loc) { 
    if (loc != null) { 
    latid = loc.getLatitude(); 
    longid = loc.getLongitude(); 
    // if(loc.hasAccuracy()==true){ 
    accuracyd = loc.getAccuracy(); 
    String providershown = loc.getProvider();  
    accuracy.setText("Location Acquired. Accuracy:" 
     + Double.toString(accuracyd) + "m\nProvider: "+providershown); 
    accuracy.setBackgroundColor(Color.GREEN); 
    // } 
    userinfo=usernamevalue+"&"+Double.toString(latid)+"&"+Double.toString(longid); 
    submituserlocation(userinfo); 
    } 
} 

当我测试它的设备(HTC Magic的)我发现当gps被禁用时,它立即从网络锁定。当我启用GPS时,它不接收来自网络的任何数据,并等待它从GPS锁定。
我想锁定的位置,如谷歌地图,直到他们有一个很好的GPS信号,他们使用网络来确定我的位置。
我虽然最好的标准会这样做,但他们所做的是挑一个提供商一次。
是否有我的代码有问题,或者我必须做线程和超时等,使其发生?

+0

spagi代码帮助我大大 - 无处在Android开发人员网站是它解释了如何获得最好的供应商。一些设备可能有GPS,一些GSM,一些WiFi。 – 2011-02-16 06:38:23

+0

这是一篇非常有趣的Google文章:http://developer.android.com/training/basics/location/currentlocation.html – shkschneider 2012-10-16 09:30:07

回答

14

也许你可以尝试收听网络提供商和gps提供商一段时间,然后检查两者的结果。如果您没有来自GPS的结果,请改用网络结果。我就是这么做的。

+0

因此,我制作了2个位置监听器,一个用于Gps,一个用于网络,并使用requestLocationUpdates对它们进行初始化。我可以用一个onLocationChanged来听他们呢? – spagi 2010-05-27 10:39:49

+0

是的,你应该听两者。在更新来自任何提供者之前,您甚至可以使用lastKnownLocation。 – Fedor 2010-05-27 11:27:48

+1

您可以在MyLocationListener中添加一个Location变量,并在onLocationChanged()中设置它的值。在主要活动中,创建两个MylocationListener实例,一个用于gps,另一个用于网络提供者。在一段时间内收听两者(你可以通过创建一个计时器线程来实现这一点),当时间到了时,停止监听并首先检查gpslistener中的位置变量(如果有的话),否则检查networklistener。 – capecrawler 2010-05-28 01:23:07