如何检查 LocationServices.FusedLocationApi.getLastLocation() 何时不为空?
Posted
技术标签:
【中文标题】如何检查 LocationServices.FusedLocationApi.getLastLocation() 何时不为空?【英文标题】:How to check when LocationServices.FusedLocationApi.getLastLocation() is not null? 【发布时间】:2016-06-16 16:19:28 【问题描述】:我首先使用 android LocationServices.SettingsApi 检查位置是否打开,如果不是,我使用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() 返回非空值。我认为我在 UI Thread 中这样做的方式是不对的。也许我可以在后台线程中做到这一点,但我想知道有一些更好的原生方式。
【问题讨论】:
【参考方案1】:您可以在此链接中找到答案 :: 已解决
LocationClient getLastLocation() return null
【讨论】:
你在说什么“融合位置不会在棒棒糖前工作”......真的:)..请检查它不是答案......【参考方案2】:你可以使用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
【讨论】:
以上是关于如何检查 LocationServices.FusedLocationApi.getLastLocation() 何时不为空?的主要内容,如果未能解决你的问题,请参考以下文章