studio services play guides googleapiclient google gms developers auth android google-api-client wear-os

android - services - googleapiclient sign in



GoogleApiClient onConnected nunca llamó a un dispositivo usable (3)

Además, noté que si intentas hacer GoogleApiClient cuando el usuario no ha configurado Google Play, puede haber un conflicto de conexión. (Simplemente reinicié mi dispositivo y eso es lo que sucedió). 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 verifique mCredentialsApiClient.isConnected () antes de realizar cualquier tarea.

Tengo un dispositivo portátil que estoy tratando de conectar con GoogleApiClient pero las devoluciones de llamada nunca se llaman (onConnected, onConnectionSuspended o onConnectionFailed). Todo lo demás está funcionando bien, el DataLayerListenerService puede recibir mensajes de la computadora de mano y se llama al onPeerConnected cuando se conecta. He intentado tanto con el emulador como con un dispositivo Samsung Gear Live. Este es el código que tengo en la Actividad donde intento conectarme con 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 si esto 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>

¿Algunas ideas?

EDITAR: Agregó lo siguiente al manifiesto ponible, que aún no funciona

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


Oh, guau, la respuesta es embarazosamente simple. Me perdí la parte donde en onStart() necesitas llamar a mGoogleApiClient.connect() .


Puede llamar a la conexión y desconectarse manualmente en los métodos de ciclo de vida onStart y onStop, o puede usar la función enableAutoManage .

mCredentialsApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .enableAutoManage(this, this) .addApi(Auth.CREDENTIALS_API) .build();