gpt4 book ai didi

android - 为什么 FusedLocationApi.getLastLocation 为空

转载 作者:IT老高 更新时间:2023-10-28 21:40:41 25 4
gpt4 key购买 nike

我正在尝试使用 FusedLocationApi.getLastLocation 获取位置,并且我在 list 文件中获得了位置权限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

但是,当我从系统请求位置时,我得到 null。我只是在测试关闭和打开位置服务,所以它可能与此有关(当然,当我尝试这个时它是打开的)。但即使在返回 null 之后,我也在等待调用 onLocationChanged 并且它永远不会被调用。我在这里也看到了类似的问题:FusedLocationApi.getLastLocation always null

这是我的代码:

 protected LocationRequest createLocationRequest() {
LocationRequest mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(120000);
mLocationRequest.setFastestInterval(30000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
return mLocationRequest;
}

protected GoogleApiClient getLocationApiClient(){
return new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}

LocationRequest locationRequest = createLocationRequest();

@Override
public void onLocationChanged(Location location) {
App.setLocation(location); // NEVER CALLED
}

@Override
public void onConnected(Bundle bundle) {
App.setLocation(LocationServices.FusedLocationApi.getLastLocation(locationApiClient)); //RETURNS NULL
LocationRequest locationRequest = createLocationRequest();
LocationServices.FusedLocationApi.requestLocationUpdates(locationApiClient, locationRequest, this);
}

在我的应用程序的 onCreate 上:

locationApiClient = getLocationApiClient();
locationApiClient.connect();

this 是我的应用程序对象。为什么我会得到空值(是的,我确实知道在文档中所述的某些极少数情况下它可能是空值,但我总是得到这个,不是很少) 此后仍未获得位置更新?如果有帮助,它是一个没有 SIM 卡的真实设备(三星 Galaxy S3)。

最佳答案

如果至少有一个客户端连接到融合位置提供程序,它将只维护后台位置。现在仅打开位置服务并不能保证存储最后一个已知位置。

一旦第一个客户端连接,它将立即尝试获取位置。如果您的 Activity 是第一个连接的客户端,并且在 onConnected() 中立即调用 getLastLocation(),则可能没有足够的时间让第一个位置到达..

然后你设置 mLocationRequest.setFastestInterval(30000); 这基本上意味着 30 秒。所以至少 30 秒后,通常根据您的设置,首选时间是 120 秒,如果根本没有存储的最后一个已知位置,这不是很长的时间吗?加上你正在设置电池平衡优先级,这会让你等待更长的时间。

mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

我建议您先启动 map 应用程序,以便至少有一些确认的位置,然后测试您的应用程序。

关于android - 为什么 FusedLocationApi.getLastLocation 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29796436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com