J'essaie de connecter un périphérique portable à GoogleApiClient mais les rappels ne sont jamais appelés (onConnected, onConnectionSuspended ou onConnectionFailed). Tout le reste fonctionne correctement, DataLayerListenerService peut recevoir des messages du terminal et onPeerConnected est appelé lorsqu’il se connecte. J'ai essayé l'émulateur et un périphérique Samsung Gear Live. C'est le code que j'ai dans l'activité où j'essaie de me connecter à 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");
}
...
}
Pas sûr que ça va aider mais c'est mon manifeste pour l'application 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>
Des idées?
EDIT: Ajouté ce qui suit au manifeste portable, ne fonctionne toujours pas bien
<meta-data Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
Oh wow, la réponse est d'une simplicité embarrassante. J'ai raté la partie où onStart()
vous devez appeler mGoogleApiClient.connect()
.
Vous pouvez appeler et connecter manuellement les méthodes de cycle de vie onStart et onStop, ou vous pouvez utiliser la fonction enableAutoManage
.
mCredentialsApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.enableAutoManage(this, this)
.addApi(Auth.CREDENTIALS_API)
.build();
De plus, j'ai remarqué que si vous essayez d'utiliser GoogleApiClient alors que l'utilisateur n'a pas configuré Google Play, il peut y avoir un conflit de connexion. (Je viens de réinitialiser mon appareil et c'est ce qui s'est passé). Il est donc recommandé de tester la connexion à partir de GoogleApiClient à l'aide de
mCredentialsApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
Ou bien, vérifiez simplement mCredentialsApiClient.isConnected () avant d'exécuter une tâche.