如何检查LocationServices.FusedLocationApi.getLastLocation()何时不为空?

时间:2016-03-03 11:08:01

标签: android google-play-services android-location

我首先使用Android LocationServices.SettingsApi检查位置是否为ON,如果不是我使用Android documentation example提供标准位置设置对话框。稍后,如果用户启用了位置,我使用 LocationServices.FusedLocationApi.getLastLocation()来获取当前位置。如下所示:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == ENABLE_LOCATION_REQUEST_CODE) {
        switch (resultCode) {
            case Activity.RESULT_OK:
                Location location = LocationServices.FusedLocationApi
                                       .getLastLocation(mGoogleApiClient);
                while (location == null) {
                    location = LocationServices.FusedLocationApi
                        .getLastLocation(mGoogleApiClient);
                }
                break;
            case Activity.RESULT_CANCELED:
                Toast.makeText(this, "Location not enabled!", Toast.LENGTH_LONG).show();
                break;
            default:
                break;
        }
    }
}

LocationServices.FusedLocationApi                             .getLastLocation()在我的设备中大约需要1秒钟,以便在启用位置后返回非空值。问题是我使用while语句直到 LocationServices.FusedLocationApi                             .getLastLocation()返回非null值。我认为我在UI Thread中这样做的方式是不对的。也许我可以在后台线程中做到这一点,但我想知道的是有一些更好的原生方式。

2 个答案:

答案 0 :(得分:0)

你可以在这个链接中找到答案::已经解决了

LocationClient getLastLocation() return null

答案 1 :(得分:0)

您可以使用Handler.postDelayed()

,而不是使用后台线程
if(location==null){
    new android.os.Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
        }
    }, 2000);//your waiting time.. I prefer 2 secs
}