我想简单地在我的Android项目中检索设备位置,为此,我使用了play-services方法:

    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变量始终为null。每次在不同的电话上都是这样。我尝试在lastLocation中分配的onLocationChanged也从未更改。始终为null。
这些是我为应用设置的权限
<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时,该getLastLocation()才会保留背景位置。现在,仅打开位置服务并不能保证存储最近的位置。

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

建议您先启动“ map ”应用,以便至少存在一些已确认的位置,然后再测试您的应用。

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

10-10 07:01