Как вы синхронизируете данные в приложении для Android и в приложении OS? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть два приложения, которыми я хочу поделиться информацией: одно для смартфона 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, но это тоже не сработало. Есть предложения относительно того, что я могу делать неправильно?

...