web-dev-qa-db-fra.com

GoogleApiClient onConnected n'a jamais appelé sur le périphérique portable

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" />
40
odiggity

Oh wow, la réponse est d'une simplicité embarrassante. J'ai raté la partie où onStart() vous devez appeler mGoogleApiClient.connect()

142
odiggity

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();
3
Imre

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. 

0
Juan Mendez