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.0com.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();
}
}
Кто-нибудь может помочь?