OnDataChanged никогда не вызывается

Я пробую dataitem API и вот мой код

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

Что я упустил, чтобы вызвать изменение данных? Я прочитал это и this, но я до сих пор не понимаю, что я должен изменить, чтобы ввести измененные данные


person UndoTheUndo    schedule 17.05.2016    source источник


Ответы (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").

person J. Lin    schedule 17.05.2016
comment
Спасибо. Это сработало для меня! Я не знаю, как я это пропустил. - person UndoTheUndo; 27.05.2016