У меня есть два приложения, которыми я хочу поделиться информацией: одно для смартфона Android, а другое для устройства с изнашиваемой ОС, такого как умные часы.Я хочу отправить информацию из умных часов на телефон.Я следовал API-документам (https://developer.android.com/training/wearables/data-layer/data-items) и имею это для телефонного приложения:
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
for (DataEvent event : dataEvents) {
if(event.getType() == DataEvent.TYPE_CHANGED) {
// DataItem changed
DataItem item = event.getDataItem();
if (item.getUri().getPath().compareTo("/sensor_data") == 0) {
DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap();
String sensors = "";
sensors += dataMap.getDouble(HEART_BEAT_KEY);
sensors += dataMap.getDouble(ACCELEROMETER_X_KEY);
sensors += dataMap.getDouble(ACCELEROMETER_Y_KEY);
sensors += dataMap.getDouble(ACCELEROMETER_Z_KEY);
sensors += dataMap.getDouble(GYROSCOPE_X_KEY);
sensors += dataMap.getDouble(GYROSCOPE_Y_KEY);
sensors += dataMap.getDouble(GYROSCOPE_Z_KEY);
sensors += dataMap.getDouble(AMBIENT_LIGHT_KEY);
mTextView.setText(sensors);
}
}
}
}
, а также в функции onCreateView (это фрагмент):
Wearable.getDataClient(this.getContext()).addListener(this);
Приложение Wear OS просто имеет это в функции onCreate:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDataClient = Wearable.getDataClient(this.getApplicationContext());
// Code from Android Tutorial: https://developer.android.com/training/wearables/data-layer/data-items
PutDataMapRequest putDataMapReq = PutDataMapRequest.create("/sensor_data");
putDataMapReq.getDataMap().putDouble(HEART_BEAT_KEY, mHeartBeat);
putDataMapReq.getDataMap().putDouble(ACCELEROMETER_X_KEY, mAccelerometerX);
putDataMapReq.getDataMap().putDouble(ACCELEROMETER_Y_KEY, mAccelerometerY);
putDataMapReq.getDataMap().putDouble(ACCELEROMETER_Z_KEY, mAccelerometerZ);
putDataMapReq.getDataMap().putDouble(GYROSCOPE_X_KEY, mGyroscopeX);
putDataMapReq.getDataMap().putDouble(GYROSCOPE_Y_KEY, mGyroscopeY);
putDataMapReq.getDataMap().putDouble(GYROSCOPE_Z_KEY, mGyroscopeZ);
putDataMapReq.getDataMap().putDouble(AMBIENT_LIGHT_KEY, mAmbientLight);
PutDataRequest putDataReq = putDataMapReq.asPutDataRequest();
putDataReq.setUrgent();
Task<DataItem> putDataTask = mDataClient.putDataItem(putDataReq);
// Enables Always-on
setAmbientEnabled();
}
Проблема в том, что функция onDataChanged никогда не вызывается в приложении телефона. Я пытался переместить onDataChangedфункция активности фрагментов для более точного соответствия API, но это тоже не сработало. Есть предложения относительно того, что я могу делать неправильно?