无法连接到GoogleAPIClient LocationServices.API

时间:2016-05-16 00:15:37

标签: android geolocation location-services android-googleapiclient

我似乎无法让GoogleApiClient处理我的项目。我正在使用LocationServicesOnConnected即使我在client.connect()方法中调用了onStart,也没有触发。 我已经搜索了stackoverflow并尝试了解决方案,但我仍然无法使其工作。 我试着检查我是否已连接,但client.isConnected()始终输出错误。 我的权限是:

android.permission.INTERNET android.permission.ACCESS_COARSE_LOCATION android.permission.ACCESS_FINE_LOCATION

我在这里错过了一些东西吗?

编辑:

private GoogleApiClient client;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
ButterKnife.inject(this);

buildGoogleApiClient();
}

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

@Override
public void onStart() {
//  client.connect();
super.onStart();

// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client.connect();
Log.e("Connected?", String.valueOf(client.isConnected()));

}

public void onConnectionFailed(ConnectionResult connectionResult) {
Log.e("Failed?", connectionResult.getErrorMessage());
}


@Override
public void onConnected(Bundle bundle) {
if ( ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED ) {
return;
}
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
client);
longt = mLastLocation.getLongitude();
latt = mLastLocation.getLatitude();
if (mLastLocation != null) {
//  mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude()));
//  mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude()));
}

}

1 个答案:

答案 0 :(得分:1)

试试这个!!

首先:删除buildGoogleApiClient();在Oncreate();

然后:

public static final int REQUEST_CODE_RESOLUTION = 1;

@Override
protected void onResume() {
    super.onResume(); 
  buildGoogleClient();
}

private void buildGoogleClient(){
 if(client != null ){
 client = new GoogleApiClient.Builder(this)
 .addApi(LocationServices.API)
 .addConnectionCallbacks(this)
 .addOnConnectionFailedListener(this).build();
 }
 client.connect();
}

  @Override
public void onConnectionFailed(ConnectionResult result) {
    Log.i(TAG, "GoogleApiClient connection failed: " + result.toString());
    if (!result.hasResolution()) {
        // show the localized error dialog.
        GoogleApiAvailability.getInstance().getErrorDialog(this, result.getErrorCode(), 0).show();
        return;
    }
    try {
        result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION);
    } catch (SendIntentException e) {
        Log.e(TAG, "Exception while starting resolution activity", e);
    }
}

    @Override
protected void onActivityResult(int requestCode, int resultCode,
        Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_RESOLUTION && resultCode == RESULT_OK) {
        client.connect();

     // Enter code get Latude and Longtude

    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(client);
 longt = mLastLocation.getLongitude();
 latt = mLastLocation.getLatitude();
 if (mLastLocation != null) {
  mLatitudeText.setText(mLastLocation.getLatitude()+"");
  mLongitudeText.setText(mLastLocation.getLongitude()+"");
 }
    }
 }