0

我希望我的代码等待 mGPS.GotLocaton 为真(在触发 onLocationChanged 事件时设置)

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);

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

4

2 回答 2

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/

于 2012-06-16T14:31:06.227 回答
0

您在哪个线程中调用获取位置的循环?

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

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

于 2012-06-16T15:41:56.690 回答