gpt4 book ai didi

android - FusedLocationApi.getLastLocation 始终为空

转载 作者:IT王子 更新时间:2023-10-29 00:05:55 26 4
gpt4 key购买 nike

我想在我的 Android 项目中简单地检索设备位置,为此我使用播放服务方法:

    protected synchronized void buildGoogleApiClient() {

mGoogleApiClient = new GoogleApiClient.Builder( MainSearchActivity.this )
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected( Bundle bundle ){
Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if( location == null ){
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, new LocationListener() {
@Override
public void onLocationChanged(Location location) {
lastLocation = location;
}
});
}
}
@Override
public void onConnectionSuspended( int i ){

}

})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed( ConnectionResult connectionResult ){
if( connectionResult.hasResolution() ){
try {
// Start an Activity that tries to resolve the error
connectionResult.startResolutionForResult(MainSearchActivity.this, CONNECTION_FAILURE_RESOLUTION_REQUEST);
}catch( IntentSender.SendIntentException e ){
e.printStackTrace();
}
}else{
Utils.logger("Location services connection failed with code " + connectionResult.getErrorCode(), Utils.LOG_DEBUG );
}
}
})
.addApi(LocationServices.API)
.build();

mGoogleApiClient.connect();
}

public Location retrieveLastLocation(){
Location loc = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if( loc == null)
{

}
return loc; //TODO: What if loc is null?
}

loc 变量始终为空。每次在不同的手机上都是如此。此外,我尝试在 onLocationChanged 中分配的 lastLocation 永远不会改变。始终为空。

这些是我为应用设置的权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.vogella.android.locationapi.maps.permission.MAPS_RECEIVE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

我只是不明白:为什么 LocationServices 不能检索位置?我在我测试的所有三台设备上都启用了所有地理位置设置。

最佳答案

融合的 Location Provider 仅在至少有一个客户端连接到它时才会维护后台位置。现在只打开定位服务并不能保证存储最后一个已知位置。

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

我建议你先启动 map 应用,这样至少有一些确认的位置,然后测试你的应用。

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

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