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
Post a Comment