【发布时间】:2015-06-30 01:03:51
【问题描述】:
我正在尝试使用 FusedLocationApi.getLastLocation 获取位置,并且我在清单文件中获得了位置权限:
<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)。
【问题讨论】:
-
Android 中没有
ACCESS_GPS或ACCESS_LOCATION权限。除此之外,没有代码很难帮助你。 -
@CommonsWare 我不知道我是怎么做到的,反正应该不会影响行为。
-
你是在真机上测试吗?除了文档说,如果客户端未连接,将返回 null。确保您的客户端已完全连接。
-
你能把代码粘贴到你初始化api客户端的地方和你得到null的地方吗?
-
这个答案与这篇文章中的废话完全一样。问题不在于位置回调,问题在于 FusedLocationProvider 为 getLastLocation 返回 null。我看到它说 null,然后正确报告,然后几秒钟后再次报告 null,仅在某些设备上。
标签: android android-4.4-kitkat android-location fusedlocationproviderapi android-fusedlocation