Thursday 15 May 2014

Realtime data exchange between Android Wearable and Handheld -



Realtime data exchange between Android Wearable and Handheld -

i working on simple app run on both wearable(samsung gear live) , handheld(moto g). want display info wearable's heart rate sensor, accelerometer , gyroscope on handheld. best way accomplish this. using dataapi, since updating info each second, allocating much memory, , killed os. here service runs on wearable

public class sensordatalistener extends service implements sensoreventlistener, connectioncallbacks, onconnectionfailedlistener { private static final string tag = sensordatalistener.class.getsimplename(); private static final int timeout_heart_rate = 1000000; private static final int timeout_accelerometer = 1000000; private static final int timeout_gyroscope = 1000000; private static final string path_sensor_data = "/sensor_data"; private static final string key_heart_rate = "heart_rate"; private static final string key_acc_x = "acc_x"; private static final string key_acc_y = "acc_y"; private static final string key_acc_z = "acc_z"; private static final string key_gyro_x = "gyro_x"; private static final string key_gyro_y = "gyro_y"; private static final string key_gyro_z = "gyro_z"; private sensormanager msensormanager; private sensor maccelerometer; private sensor mgyroscope; private sensor mheartrate; private int mcurheartrateval; private float[] mcuraccelerometerval = new float[3]; private float[] mcurgyroscopeval = new float[3]; private googleapiclient mgoogleapiclient; scheduledexecutorservice mupdatescheduler; scheduledexecutorservice scheduler; @override public void oncreate() { super.oncreate(); mgoogleapiclient = new googleapiclient.builder(this) .addapi(com.google.android.gms.wearable.wearable.api) .build(); mgoogleapiclient.connect(); msensormanager = ((sensormanager)getsystemservice(sensor_service)); mheartrate = msensormanager.getdefaultsensor(sensor.type_heart_rate); maccelerometer = msensormanager.getdefaultsensor(sensor.type_accelerometer); mgyroscope = msensormanager.getdefaultsensor(sensor.type_gyroscope); startdataupdated(); } private void startdataupdated() { scheduler = executors.newsinglethreadscheduledexecutor(); scheduler.scheduleatfixedrate (new runnable() { public void run() { updatedata(); } }, 5, 3, timeunit.seconds); } private void updatedata() { putdatamaprequest datamap = putdatamaprequest.create(path_sensor_data); datamap.getdatamap().putint(key_heart_rate, mcurheartrateval); datamap.getdatamap().putfloat(key_acc_x, mcuraccelerometerval[0]); datamap.getdatamap().putfloat(key_acc_y, mcuraccelerometerval[1]); datamap.getdatamap().putfloat(key_acc_z, mcuraccelerometerval[2]); datamap.getdatamap().putfloat(key_gyro_x, mcurgyroscopeval[0]); datamap.getdatamap().putfloat(key_gyro_y, mcurgyroscopeval[1]); datamap.getdatamap().putfloat(key_gyro_z, mcurgyroscopeval[2]); putdatarequest request = datamap.asputdatarequest(); wearable.dataapi.putdataitem(mgoogleapiclient, request); } @override public int onstartcommand(intent intent, int flags, int startid) { msensormanager.registerlistener(this, mheartrate, timeout_heart_rate); msensormanager.registerlistener(this, maccelerometer, timeout_accelerometer); msensormanager.registerlistener(this, mgyroscope, timeout_gyroscope); homecoming start_not_sticky; } @override public void ondestroy() { log.d(tag, "ondestroy"); mgoogleapiclient.disconnect(); scheduler.shutdown(); msensormanager.unregisterlistener(this); //mupdatescheduler.shutdownnow(); super.ondestroy(); } @override public void onsensorchanged(sensorevent event) { switch(event.sensor.gettype()) { case sensor.type_heart_rate: if(event.values[0] <= 0) // hr sensor beingness initialized return; mcurheartrateval = float.valueof(event.values[0]).intvalue(); break; case sensor.type_accelerometer: mcuraccelerometerval[0] = event.values[0]; mcuraccelerometerval[1] = event.values[1]; mcuraccelerometerval[2] = event.values[2]; break; case sensor.type_gyroscope: { mcurgyroscopeval[0] = event.values[0]; mcurgyroscopeval[1] = event.values[1]; mcurgyroscopeval[2] = event.values[2]; break; } } } @override public void onaccuracychanged(sensor sensor, int accuracy) {} @override public void onconnected(bundle bundle) { log.d(tag, "onconnected"); } @override public void onconnectionsuspended(int i) { log.d(tag, "onconnectionsuspended"); } @override public void onconnectionfailed(connectionresult connectionresult) { log.d(tag, "onconnectionfailed"); } @override public ibinder onbind(intent intent) { homecoming null; } }

try using message api instead of info api. create message containing info , send on other device : http://developer.android.com/reference/com/google/android/gms/wearable/messageapi.html

android-wear android-wear-data-api

No comments:

Post a Comment