OnDataChanged никогда не вызывается
Я пытаюсь API dataitem и вот мой код
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle connectionHint) {
Log.d("Inside", "onConnected: " + connectionHint);
Toast.makeText(getApplicationContext(),"Inside On connected",Toast.LENGTH_SHORT).show();
// Now you can use the Data Layer API
//Creating Dataitem
PutDataMapRequest dataMapRequest = PutDataMapRequest.create("/count");
dataMapRequest.setUrgent();
DataMap datamap=dataMapRequest.getDataMap();
PutDataRequest putDataRequest=dataMapRequest.asPutDataRequest();
datamap.putString("key", "Value");
PendingResult<DataApi.DataItemResult> pendingResult =
Wearable.DataApi.putDataItem(mGoogleApiClient, putDataRequest);
}
@Override
public void onConnectionSuspended(int cause) {
Log.d("Inside", "onConnectionSuspended: " + cause);
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult result) {
Log.d("Inside", "onConnectionFailed: " + result);
}
})
// Request access only to the Wearable API
.addApiIfAvailable(Wearable.API)
.build();
mGoogleApiClient.connect();
}
@Override
public void onDataChanged(DataEventBuffer dataEventBuffer) {
Log.d("Inside","onDataChanged");
}
Что я упускаю, чтобы вызвать изменения данных? Я читал это и это, но мне все еще неясно, что я должен изменить, чтобы ввести данные изменились
1 ответ
Если вы используете DataApi.DataListener, то вам нужно добавить Listener после подключения GoogleApiClient. Что-то вроде: Wearable.DataApi.addListener(mGoogleApiClient, this)
внутри вашего GoogleApiClient.ConnectionCallbacks
,
Если вы используете WearableListenerService, убедитесь, что у вас есть аналогичный код в вашем AndroidManifest.xml на стороне приема / прослушивания, как показано ниже:
<service android:name=".YourCustomWearableListenerService">
<intent-filter>
<action android:name="com.google.android.gms.wearable.DATA_CHANGED"/>
<data android:scheme="wear"
android:host="*"
<!-- I believe pathPrefix is optional, removing it will make the service listener to all data change events -->
android:pathPrefix="/YourDataMapPathPrefix"/>
</intent-filter>
</service>
Также имейте в виду, что onDataChanged
вызов поступит только в том случае, если данные фактически изменены. Предположим, что старые данные ("Персона", "Боб") и вы заменяете их теми же данными ("Персона", "Боб"), затем onDataChanged
не сработает, поскольку данные на самом деле не изменяются. Но onDataChanged
будет срабатывать, если вы поставите вместо него ("Person", "Bob2").