Java 从android wear向smarthphone发送加速计数据

Java 从android wear向smarthphone发送加速计数据,java,android,wear-os,android-wear-data-api,Java,Android,Wear Os,Android Wear Data Api,我正试图从android Wear向智能手机发送一些信息,但我遇到两个问题,首先我使用的是PutDataRequest,但它不起作用,我不知道我做错了什么: public class MainActivity extends WearableActivity implements SensorEventListener, DataApi.DataListener, MessageApi.MessageListener, GoogleApiClient.ConnectionCallbacks, G

我正试图从android Wear向智能手机发送一些信息,但我遇到两个问题,首先我使用的是PutDataRequest,但它不起作用,我不知道我做错了什么:

public class MainActivity extends WearableActivity implements SensorEventListener, DataApi.DataListener, MessageApi.MessageListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setAmbientEnabled();

    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

    apiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .addConnectionCallbacks(this)//nos notifica cuando estamos conectados
            .addOnConnectionFailedListener(this)// ofrece el resultado del error
            .build();
    if(!apiClient.isConnected())
        apiClient.connect();

    x = (TextView) findViewById(R.id.x);
    y = (TextView) findViewById(R.id.y);
    z = (TextView) findViewById(R.id.z);



}
我以这种方式向手机发送值,我知道这是错误的,那么我应该如何在一条消息中发送三个值,而不是发送三条消息

 public void onSensorChanged(SensorEvent event) {

    accelerometer[0]=event.values[0];
    accelerometer[1]=event.values[1];
    accelerometer[2]=event.values[2];

    x.setText(Float.toString(event.values[0]));
    y.setText(Float.toString(event.values[1]));
    z.setText(Float.toString(event.values[2]));

    //Send X acceleration
    putDataMapReq = PutDataMapRequest.create(ITEM_0);
    putDataMapReq.getDataMap().putFloat(KEY,  accelerometer[0]);
    putDataReq = putDataMapReq.asPutDataRequest();
    resultado = Wearable.DataApi.putDataItem(apiClient, putDataReq);
    Wearable.DataApi.putDataItem(apiClient,putDataReq);
另一方面,在电话中,我通过以下方式接收信息:

public class MainActivity extends AppCompatActivity implements DataApi.DataListener, MessageApi.MessageListener, GoogleApiClient.ConnectionCallbacks,  GoogleApiClient.OnConnectionFailedListener{


//On create

apiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .addConnectionCallbacks(this) 
            .addOnConnectionFailedListener(this)
            .build();

    if(!apiClient.isConnected())
        apiClient.connect();
在此处接收消息:

@Override
public void onDataChanged(DataEventBuffer eventos) {

        for (DataEvent event : eventos) {
            if (event.getType() == DataEvent.TYPE_CHANGED){
                DataItem item =event.getDataItem();
                if (item.getUri().getPath().equals(ITEM_0)) {
                    DataMapItem dataMapItem = DataMapItem.fromDataItem(item);

                    acel_x = dataMapItem.getDataMap().getFloat(KEY);

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            ((TextView) findViewById(R.id.x)).setText(Float.toString(acel_x));

                        }
                    });
                }

所以我想问你们,我应该如何发送/接收消息,以及我应该如何发送消息以避免内存溢出?

DataMap已经发布了putFloatArray/getFloatArray

佩戴:

电话:

acel_xyz = dataMapItem.getDataMap().getFloatArray(KEY);

DataMap具有putFloatArray/getFloatArray

佩戴:

电话:

acel_xyz = dataMapItem.getDataMap().getFloatArray(KEY);

为什么你不能把数据存储在手表里,以后再检索呢?如果你真的想在手机中获得实时数据,那么你可以使用消息api发送数据。是的,我想要实时数据。但是我应该如何使用它呢?每次值更改时发送消息?这会导致内存溢出,不是吗?为什么不能将数据存储在手表中,稍后再检索?如果你真的想在手机中获得实时数据,那么你可以使用消息api发送数据。是的,我想要实时数据。但是我应该如何使用它呢?每次值更改时发送消息?那会导致内存溢出,不是吗?