如何在android中让函数执行等待

如何在android中让函数执行等待,android,geolocation,Android,Geolocation,我是android编程新手。所以,如果这是一个愚蠢的问题,请原谅我 在我的应用程序中,我试图开发一种功能,如果手机中的位置服务被关闭,那么该应用程序会通过点击按钮将用户带到位置设置页面来提示用户打开它。问题是,在打开位置设置后,手机会花费一些时间来给出位置坐标,因此,假设显示坐标的片段在相同的时间内保持为空,并造成混淆 我想知道的是,是否有任何方法可以安排函数的执行,在确保有一些坐标要获取之后,函数将获取位置坐标 我正在使用“getLastKnowLocation()”。获取位置的代码如下所示:

我是android编程新手。所以,如果这是一个愚蠢的问题,请原谅我

在我的应用程序中,我试图开发一种功能,如果手机中的位置服务被关闭,那么该应用程序会通过点击按钮将用户带到位置设置页面来提示用户打开它。问题是,在打开位置设置后,手机会花费一些时间来给出位置坐标,因此,假设显示坐标的片段在相同的时间内保持为空,并造成混淆

我想知道的是,是否有任何方法可以安排函数的执行,在确保有一些坐标要获取之后,函数将获取位置坐标

我正在使用“getLastKnowLocation()”。获取位置的代码如下所示:-

public String getLocation()
    {
        // Get the location manager
        LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String bestProvider = locationManager.getBestProvider(criteria, false);
    android.location.Location location = locationManager.getLastKnownLocation(bestProvider);
    Double lat,lon;
    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Date date = new Date();
    try {
        lat = location.getLatitude ();
        lon = location.getLongitude ();

    }
    catch (NullPointerException e){

    }
}

创建布尔变量
locationLoaded
。在以下代码行中:

try {
    lat = location.getLatitude ();
    lon = location.getLongitude ();
    //set the value of variable to true once you get location
    locationLoaded=true;
}
catch (NullPointerException e){

}
然后创建一个新的递归方法,该方法将不断检查位置,直到未加载为止,如下所示:

private void keepCheckingLocation(){
    if(locationLoaded){
        //location is loaded
        return;
    }
    else{
        //location is not loaded yet
        try {
            //wait for two seconds
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //call the method again to check the location
        keepCheckingLocation();
    }
}
调用此方法后,它不会让下一行代码执行,直到
locationLoaded
不为true,并且
locationLoaded
仅在加载位置后才为true。因此,只要您想等待加载位置,就可以使用此方法


注:设置
locationLoaded=false如果必须再次检查位置。这将使代码更加高效。

只需添加一个活动圈,指示正在获取的位置即可。(请参阅)您是否能够解决您的问题,或者是否需要其他信息?这是一个好主意。但不幸的是,它没有多大用处,因为我的应用程序在应用此逻辑后崩溃了。我想这可能是因为我通过应用它来阻止UI线程。无论如何谢谢你@DroidDev@zstart我在我的
AcyncTask
类的
doInBackground
方法中使用了这个方法。您可能还需要检查变量
locationLoaded
的可用性。