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

Другие вопросы по тегам