GoogleApiClient onConnected nunca se llama en un dispositivo portátil


Tengo un dispositivo portátil que estoy tratando de conectar al GoogleApiClient, pero las devoluciones de llamada nunca se llaman (onConnected, onConnectionSuspended o onConnectionFailed). Todo lo demás está funcionando bien, el DataLayerListenerService es capaz de recibir mensajes de la mano y el onPeerConnected se llama cuando se conecta. He probado en el emulador y un dispositivo Samsung Gear Live. Este es el código que tengo en la Actividad donde estoy tratando de conectar a la GoogleApiClient.

public class WearReaderActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
    public static final String CONTENT_EXTRA = "contentExtra";
    private String LOG_TAG = WearReaderActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.reader);
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(Wearable.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
    }

    private GoogleApiClient mGoogleApiClient;

    @Override
    protected void onStart() {
        super.onStart();
        Log.e("Connected?", String.valueOf(mGoogleApiClient.isConnected()));
        //new Thread(new GetContent()).start();
    }

    @Override
    public void onConnected(Bundle bundle) {
        Log.d("Connected", "Connected");
        new Thread(new GetContent()).start();
    }

    @Override
    public void onConnectionSuspended(int i) {
        Log.d("Connection suspened", "Connection suspended");
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        Log.d("Connection suspened", "Connection suspended");
    }
...
}

No estoy seguro de si va a ayudar, pero este es mi Manifiesto para la aplicación Wearable

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="my.packagename">
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.DeviceDefault" >
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

    <activity
        android:name=".WearReaderActivity"
        android:label="Reading" >
        <intent-filter>
           <action android:name="android.intent.action.MAIN" />
           <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

<meta-data android:name="com.google.android.gms.version"
       android:value="@integer/google_play_services_version" />

    <service
        android:name=".DataLayerListenerService" >
        <intent-filter>
            <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
        </intent-filter>
    </service>

</application>

¿Alguna idea?

EDITAR: Se agregó lo siguiente al manifiesto wearable, aunque aún no funciona

<meta-data android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version" />
Author: N J, 2014-07-10

3 answers

Oh wow, la respuesta es vergonzosamente simple. Me perdí la parte en la que en onStart() necesitas llamar a mGoogleApiClient.connect().

 142
Author: odiggity,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-28 12:57:11

Puede llamar a conectar y desconectar manualmente en los métodos de ciclo de vida onStart y onStop, o puede usar el enableAutoManage característica.

mCredentialsApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .enableAutoManage(this, this)
            .addApi(Auth.CREDENTIALS_API)
            .build();
 3
Author: Imre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-22 16:13:44

Además, me di cuenta de que si intenta hacer GoogleApiClient cuando el usuario no ha configurado Google Play puede haber un conflicto de conexión. (Acabo de restablecer mi dispositivo y eso es lo que pasó). Por lo tanto, es una buena práctica probar la conexión de GoogleApiClient usando

mCredentialsApiClient = new GoogleApiClient.Builder(this)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)

O simplemente revise mCredentialsApiClient.isConnected () antes de peforming cualquier tarea.

 0
Author: Juan Mendez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-29 22:55:00