2016-10-10 97 views
1

我试图从android Wear发送一些信息到智能手机,但即时通讯有两个麻烦,首先我使用PutDataRequest,但它不工作,我不知道我在做什么错误:发送加速度计数据从android wear到smarthphone

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); 

在我收到的messesages这种方式在手机上的其他方式:

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)); 

         } 
        }); 
       } 

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

+0

你为什么不能存储在表中的数据,并在以后检索它?如果你真的想要手机中的实时数据,那么你可以使用消息API来发送数据。 – NewOne

+0

是的,我想要实时数据。但我应该如何使用它?每次更改值时发送消息?这会导致内存溢出,不会吗? – user5034027

回答

0

DataMap有putFloatArray/getFloatArray。

磨损:

putDataMapReq.getDataMap().putFloatArray(KEY, accelerometer); 

电话:

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

是的,但我应该多长时间发送一次数据? – user5034027