2012-06-16 48 views
0

我想我的代码等待mGPS.GotLocaton为真(时设置onLocationChanged事件被触发)等待被设置为true

public class GPSManager { 
    Context MyContext; 
    boolean GotLocation = false; 
    Location CurrentLocation; 
    LocationManager locationManager; 

    LocationListener locationlistener = new LocationListener() { 
     public void onLocationChanged(Location location) { 
      // Called when a new location is found by the network location provider. 
      GotLocation = true; 
      locationManager.removeUpdates(locationlistener); 
     } 

     public void onStatusChanged(String provider, int status, Bundle extras) {} 

     public void onProviderEnabled(String provider) {} 

     public void onProviderDisabled(String provider) {} 
    }; 

    public GPSManager(Context context){ 
     this.MyContext = context; 
     locationManager = (LocationManager) MyContext.getSystemService(Context.LOCATION_SERVICE); 
    } 

    public void GetCurrentLocation(){ 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationlistener); 
     GotLocation = false; 
    } 
} 

由一个名为:

myGPS.GetCurrentLocation(); 
    do{ 
    }while (!myGPS.GotLocation); 

但它不会等待/循环 - 我错过了什么。

+0

看起来像Android代码所以增加了Android标签 –

回答

1

可能是因为您在添加LocationListener时已立即收到位置响应。

虽然这是一些奇怪的代码。考虑使用回调来代替。

有关位置的东西更多信息,请参阅本Android开发者博客条目:

http://android-developers.blogspot.co.uk/2011/06/deep-dive-into-location.html

甚至更​​好,使用这个库可以解决这一切为您:在

http://code.google.com/p/little-fluffy-location-library/

+0

也他的代码是脏的写我不明白他为什么要在onLocationChanged中调用removeUpdates。 – Sajmon

+0

也不确定,但也许他只是想要一个位置更新。 –

+0

是的,也许是的。 – Sajmon

0

哪个线程可以称为获取位置的循环?

如果它在主线程中,这是非常错误的,因为locationlistener只能获取在该线程上运行的事件,但由于该线程在循环中,因此它永远不会到达那里,因此您处于无限循环中,也会在大约5秒钟左右导致ANR。

locationlistener的工作方式是使用观察者设计模式 - 当它有东西给你,它会。你不能一次又一次地问它。您可以使用的唯一类似的事情是使用getLastKnownLocation获取它的最后一个位置。