未调用onConnected()以获取位置更新(GooglePlayApi表示位置)

时间:2015-02-03 14:25:41

标签: android location google-play-services

所以我有这段代码:

package com.entu.bocterapp;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;

public class LocationManager implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

private Context mContext;
private GoogleApiClient mGoogleApiClient;
private Location mLastLocation;
private LocationRequest mLocationRequest;

public LocationManager(Context context) {
    mContext = context;
    //
    if (checkIfGooglePlayServicesAreAvailable()) {
        //Get Access to the google service api
        buildGoogleApiClient();
        mGoogleApiClient.connect();
    } else {
        //Use Android Location Services
        //TODO:
    }
}

public Location getCoarseLocation() {
    if (mLastLocation != null) {
        return mLastLocation;
    } else return null;
}

private synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(mContext)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
}

private boolean checkIfGooglePlayServicesAreAvailable() {
    int errorCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(mContext);
    if (errorCode != ConnectionResult.SUCCESS) {
        GooglePlayServicesUtil.getErrorDialog(errorCode, (RecentSightings) mContext, 0).show();
        return false;
    }
    return true;
}


@Override
public void onConnected(Bundle bundle) {
    Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    if (location != null) {
        mLastLocation = location;
        Toast.makeText(mContext, location.getLongitude() + " , " + location.getLatitude() + " : " + location.getAccuracy(), Toast.LENGTH_LONG).show();
    }
}

@Override
public void onConnectionSuspended(int i) {
    Toast.makeText(mContext, "suspended", Toast.LENGTH_LONG).show();
}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}

}

我正在尝试获取此类中的位置,但onConnected()永远不会被调用(我等了1-2分钟)。我选择了调试器,它说可以使用谷歌播放服务。

有谁知道我做错了什么?我被困在这里几个小时,阅读所有内容,无法让它发挥作用。

干杯!

3 个答案:

答案 0 :(得分:12)

你必须致电

mGoogleApiClient.connect();

答案 1 :(得分:1)

试试这个:

@Override
protected void onStart() {
    if(mGoogleApiClient!=null){

        mGoogleApiClient.connect();
    }
    super.onStart();
}

@Override
protected void onStop() {
    if(mGoogleApiClient!=null){

        if(mGoogleApiClient.isConnected()){

            mGoogleApiClient.disconnect();
        }

    }

    super.onStop();
}

答案 2 :(得分:1)

我遇到了同样的问题,只是将我的成绩版:10.0.1'更新为

compile 'com.google.android.gms:play-services-location:10.2.1'

它有效。