2016-10-10 83 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