Android носить DataApi onDataChanged() не вызывается для всех запросов

Я пытаюсь использовать DataApi а также DataApi.DataListener отправлять данные с телефона на часы, но onDataChanged не вызывается для всех запросов (только некоторые доставлены) отправить с телефона Wearable.DataApi.putDataItem(mGoogleApiClient, request) хотя ResultCallback<DataApi.DataItemResult>() результат успешен для всех запросов

Чтобы данные всегда были разными (onDataChanged() вызывается только при изменении данных), я добавляю метку времени в DataMap для каждого запроса, как это: myRequestDataMap.putLong("timeStamp", System.currentTimeMillis()) и быть вызванным немедленно с помощью setUrgent()

В целях отладки я также отправляю сообщение, используя MessageApi сразу после запроса и все сообщения доставляются.

Заметки:

  • applicationId одинаково для телефонов и приложений для часов
  • play-services-wearable версия тоже такая же и 9.8.0
  • com.google.android.wearable:wearable версия 2.0.3
  • протестировано с LG G Watch и эмулятором

РЕДАКТИРОВАТЬ: смотреть манифест приложения

<manifest
package="app.package"
xmlns:android="http://schemas.android.com/apk/res/android">

<uses-feature
    android:name="android.hardware.type.watch"
    android:required="true"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.DeviceDefault.Light">

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

    <meta-data
        android:name="com.google.android.wearable.standalone"
        android:value="false" />

    <activity
        android:name="app.package.Activity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

</application>

РЕДАКТИРОВАТЬ 2:

Приложение для телефона:

public class App extends Application implements MessageApi.MessageListener, GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener {

@Override
public void onCreate() {
    super.onCreate();
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Wearable.API)
            .build();
    mGoogleApiClient.connect();
}

@Override
public void onMessageReceived(final MessageEvent messageEvent) {
    //as response to data request
    ...
    //load data from DB
    ...
    while (!cursor.isAfterLast()) {
        ...

        PutDataMapRequest dataMapRequest = myObject.generateDataMap();
        dataMapRequest.getDataMap().putLong("timeStamp", System.currentTimeMillis());
        PutDataRequest request = dataMapRequest.asPutDataRequest();
        PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi
            .putDataItem(mGoogleApiClient, request);

        pendingResult.setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
            @Override
            public void onResult(final DataApi.DataItemResult result) {
                if (result.getStatus().isSuccess()) {
                    Log.d(TAG, "Success");
                } else {
                    Log.d(TAG, "Failed");
                }
            }
        });

        cursor.moveToNext();
    }

}   

}

Носить приложение:

public class WearActivity extends Activity implements GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener, DataApi.DataListener, NodeApi.NodeListener, 
    MessageApi.MessageListener {

@Override
public void onStart() {
    super.onStart();
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
    mGoogleApiClient.connect();
}

@Override
public void onConnected(Bundle bundle) {
    Wearable.DataApi.addListener(mGoogleApiClient, this);
    Wearable.MessageApi.addListener(mGoogleApiClient, this);
    Wearable.NodeApi.addListener(mGoogleApiClient, this);
}

@Override
public void onDataChanged(DataEventBuffer dataEvents) {
    final List<DataEvent> events = FreezableUtils.freezeIterable(dataEvents);
    for (DataEvent event : events) {
        if (event.getType() == DataEvent.TYPE_CHANGED) {
            DataMapItem dataMapItem = DataMapItem.fromDataItem(event.getDataItem());
            ...
        }
    }
}

 @Override
public void onStop() {
    if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
        Wearable.DataApi.removeListener(mGoogleApiClient, this);
        Wearable.MessageApi.removeListener(mGoogleApiClient, this);
        Wearable.NodeApi.removeListener(mGoogleApiClient, this);
        mGoogleApiClient.disconnect();
    }

    super.onStop();
}

}

Кто-нибудь может помочь?

0 ответов

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