Intento conectarme al cliente API de Google para lograr alguna funcionalidad en mi aplicación. Pero por alguna razón no puedo conectarme al cliente API de Google y por eso no puedo seguir usando los servicios de Google.

Después de inicializar GoogleApiClient, verifico si mGoogleApiClient.isConnected y siempre obtengo False y no sé por qué. Apreciaría cualquier ayuda. Gracias.

Observe que todo sucede en el servicio en segundo plano.

public class Background extends Service implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, ResultCallback<Status> {

private String TAG = "Background";

private GoogleApiClient mGoogleApiClient;
@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {


    Log.e(TAG,"Start");


    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(ActivityRecognition.API)
            .addApi(LocationServices.API)
            .build();

    if (!mGoogleApiClient.isConnected()) {
        Log.e(TAG,"GoogleApiClient not yet connected");
    } else {
        Log.e(TAG,"GoogleApiClient connected");

    }

    return Service.START_STICKY;
}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
    Log.e(TAG, "Connection failed. Error: " + connectionResult.getErrorCode());

}

@Override
public void onResult(Status status) {
    if (status.isSuccess()) {
        Log.e(TAG, "Successfully added activity detection.");

    } else {
        Log.e(TAG, "Error: " + status.getStatusMessage());
    }
}

@Override
public void onConnected(Bundle bundle) {
    Log.i(TAG, "Connected");
    mGoogleApiClient.connect();
}

@Override
public void onConnectionSuspended(int i) {
    Log.i(TAG, "Connection suspended");
    mGoogleApiClient.connect();
}
0
0xAlon 16 feb. 2018 a las 16:10

2 respuestas

La mejor respuesta

Conecte googleApiClient en onStartCommand de su servicio

@Override
public int onStartCommand(Intent intent, int flags, int startId) {


Log.e(TAG,"Start");


mGoogleApiClient = new GoogleApiClient.Builder(this)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .addApi(ActivityRecognition.API)
        .addApi(LocationServices.API)
        .build();

  if (!mGoogleApiClient.isConnected()) {
    Log.e(TAG,"GoogleApiClient not yet connected");

    mGoogleApiClient.connect(); // connect it here..

  } else {
    Log.e(TAG,"GoogleApiClient connected");

}

return Service.START_STICKY;

}
0
Santanu Sur 16 feb. 2018 a las 13:14

No está llamando a .connect () en el lugar correcto. Está creando un cliente y debe llamar a .connect () después de eso. Inmediatamente está comprobando si está conectado, que nunca lo estará.

Agregue .connect () después de .build () en .onStartCommand () y elimine este código:

if (!mGoogleApiClient.isConnected()) {
    Log.e(TAG,"GoogleApiClient not yet connected");
} else {
    Log.e(TAG,"GoogleApiClient connected");
}

Además, elimine esto, ya que podría ponerlo en un estado no deseado:

@Override
public void onConnected(Bundle bundle) {
    Log.i(TAG, "Connected");
    // remove this -> mGoogleApiClient.connect();
}
0
Robert K. 16 feb. 2018 a las 13:13