webentwicklung-frage-antwort-db.com.de

GoogleApiClient onConnected wurde nie auf einem tragbaren Gerät aufgerufen

Ich habe ein tragbares Gerät, das ich versuche, eine Verbindung zum GoogleApiClient herzustellen, aber die Rückrufe werden nie aufgerufen (onConnected, onConnectionSuspended oder onConnectionFailed). Alles andere funktioniert einwandfrei, der DataLayerListenerService kann Nachrichten vom Handheld empfangen und der onPeerConnected wird beim Verbindungsaufbau aufgerufen. Ich habe sowohl den Emulator als auch ein Samsung Gear Live-Gerät ausprobiert. Dies ist der Code, den ich in der Aktivität habe, bei der ich eine Verbindung zum GoogleApiClient herstellen möchte. 

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");
    }
...
}

Nicht sicher, ob es helfen wird, aber dies ist mein Manifest für die Wearable-App

    <?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>

Irgendwelche Ideen? 

BEARBEITEN: Dem Wearable-Manifest wurde Folgendes hinzugefügt, obwohl es immer noch nicht funktioniert

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

Oh wow, die Antwort ist peinlich einfach. Ich habe den Teil verpasst, in dem Sie in onStart()mGoogleApiClient.connect() aufrufen müssen. 

142
odiggity

Sie können das Verbinden und Trennen manuell in den Lebenszyklusmethoden onStart und onStop aufrufen, oder Sie können die Funktion enableAutoManage verwenden.

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

Außerdem ist mir aufgefallen, dass es beim Verbindungsaufbau zu einem Konflikt kommen kann, wenn Sie versuchen, GoogleApiClient auszuführen, wenn der Benutzer Google Play nicht eingerichtet hat. (Ich setze gerade mein Gerät zurück und das ist, was passiert ist). Es empfiehlt sich daher, die Verbindung von GoogleApiClient mit zu testen 

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

Oder überprüfen Sie einfach mCredentialsApiClient.isConnected (), bevor Sie eine Aufgabe ausführen. 

0
Juan Mendez