Google fit API, onDatapoint method is not being invoked -


i not able step count. i've been stuck on getting ondatapoint method called. code correct. not able find why not showing step count.

package com.example.akkisocc.heath;   import android.content.intent; import android.content.intentsender; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.util.log; import android.widget.textview; import android.widget.toast;  import com.google.android.gms.common.connectionresult; import com.google.android.gms.common.scopes; import com.google.android.gms.common.api.googleapiclient; import com.google.android.gms.common.api.resultcallback; import com.google.android.gms.common.api.scope; import com.google.android.gms.common.api.status; import com.google.android.gms.fitness.fitness; import com.google.android.gms.fitness.data.datapoint; import com.google.android.gms.fitness.data.datasource; import com.google.android.gms.fitness.data.datatype; import com.google.android.gms.fitness.data.field; import com.google.android.gms.fitness.data.value; import com.google.android.gms.fitness.request.datasourcesrequest; import com.google.android.gms.fitness.request.ondatapointlistener; import com.google.android.gms.fitness.request.sensorrequest; import com.google.android.gms.fitness.result.datasourcesresult;  import java.util.concurrent.timeunit;  public class mainactivity extends appcompatactivity implements ondatapointlistener,         googleapiclient.connectioncallbacks,         googleapiclient.onconnectionfailedlistener {     private static final int request_oauth = 1;     private static final string auth_pending = "auth_state_pending";     textview msg;     private boolean authinprogress = false;     private googleapiclient mapiclient;      @override protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);         msg = (textview) findviewbyid(r.id.msg);         msg.settext("on create"); log.e("googlefit", "oncreate");          if (savedinstancestate != null) {             authinprogress = savedinstancestate.getboolean(auth_pending);         }          mapiclient = new googleapiclient.builder(this)                 .addapi(fitness.sensors_api)                 .addscope(new scope(scopes.fitness_activity_read_write))                 .addconnectioncallbacks(this)                 .addonconnectionfailedlistener(this)                 .build();     }      @override     protected void onstart() {         super.onstart();         mapiclient.connect();     }      @override     protected void onactivityresult(int requestcode, int resultcode, intent data) {         if (requestcode == request_oauth) {             authinprogress = false;             if (resultcode == result_ok) {                 if (!mapiclient.isconnecting() && !mapiclient.isconnected()) {                     mapiclient.connect();                 }             } else if (resultcode == result_canceled) {                 log.e("googlefit", "result_canceled");             }         } else {             log.e("googlefit", "requestcode not request_oauth");         }     }      @override     public void onconnected(bundle bundle) {         datasourcesrequest datasourcerequest = new datasourcesrequest.builder()                 .setdatatypes(datatype.type_step_count_cumulative)                 .setdatasourcetypes(datasource.type_raw)                 .build();          resultcallback<datasourcesresult> datasourcesresultcallback = new resultcallback<datasourcesresult>() {             @override             public void onresult(datasourcesresult datasourcesresult) {                 (datasource datasource : datasourcesresult.getdatasources()) {                     if (datatype.type_step_count_cumulative.equals(datasource.getdatatype())) {                         registerfitnessdatalistener(datasource, datatype.type_step_count_cumulative);                     }                 }             }         };          fitness.sensorsapi.finddatasources(mapiclient, datasourcerequest)                 .setresultcallback(datasourcesresultcallback);     }      @override     public void onconnectionsuspended(int i) {      }      @override     public void onconnectionfailed(connectionresult connectionresult) {         if (!authinprogress) {             try {                 authinprogress = true;                 connectionresult.startresolutionforresult(mainactivity.this, request_oauth);             } catch (intentsender.sendintentexception e) {              }         } else {             log.e("googlefit", "authinprogress");         }      }      private void registerfitnessdatalistener(datasource datasource, datatype datatype) {          sensorrequest request = new sensorrequest.builder()                 .setdatasource(datasource)                 .setdatatype(datatype)                 .setsamplingrate(3, timeunit.seconds)                 .build();          fitness.sensorsapi.add(mapiclient, request, this)                 .setresultcallback(new resultcallback<status>() {                     @override                     public void onresult(status status) {                         if (status.issuccess()) {                             log.e("googlefit", "sensorapi added");                         }                     }                 });     }      @override     public void ondatapoint(datapoint datapoint) {         (final field field : datapoint.getdatatype().getfields()) {             final value value = datapoint.getvalue(field);             runonuithread(new runnable() {                 @override                 public void run() {                     toast.maketext(getapplicationcontext(), "field: " + field.getname() + " value: " + value, toast.length_short).show();                 }             });         }     } } 

(as solved in comments) issue type_step_count_cumulative not raw data type—google uses combination of sensors, accelerometer, machine learning, etc. determine step count. .setdatasourcetypes(datasource.type_raw) line needs removed.

op noticed removing line gives less accurate results replacing datasource.type_derived.

also, google fit faq has example uses type_derived.


Comments