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" />
Oh wow, die Antwort ist peinlich einfach. Ich habe den Teil verpasst, in dem Sie in onStart()
mGoogleApiClient.connect()
aufrufen müssen.
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();
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.