Java Can';t使用smartband 2从google fit API获取心率数据
我正在尝试使用google Fit API从sony smartband2获取心率。问题是,我并没有得到任何读数(即,并没有调用onDataPoint方法)。心率传感器被正确地找到了,如果我试图寻找阶跃数据,整个代码也工作正常Java Can';t使用smartband 2从google fit API获取心率数据,java,android,sony,google-fit,google-fit-sdk,Java,Android,Sony,Google Fit,Google Fit Sdk,我正在尝试使用google Fit API从sony smartband2获取心率。问题是,我并没有得到任何读数(即,并没有调用onDataPoint方法)。心率传感器被正确地找到了,如果我试图寻找阶跃数据,整个代码也工作正常 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
authInProgress = savedInstanceState.getBoolean(AUTH_PENDING);
}
mApiClient = new GoogleApiClient.Builder(this)
.addApi(Fitness.SENSORS_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ))
.addScope(new Scope(Scopes.FITNESS_BODY_READ))
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
protected void onStart() {
super.onStart();
mApiClient.connect();
}
@Override
public void onConnected(Bundle bundle) {
final DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder()
.setDataTypes(DataType.TYPE_HEART_RATE_BPM)
.setDataSourceTypes(DataSource.TYPE_RAW)
.build();
Fitness.SensorsApi.findDataSources(mApiClient, dataSourceRequest)
.setResultCallback(new ResultCallback<DataSourcesResult>() {
@Override
public void onResult(DataSourcesResult dataSourcesResult) {
for(DataSource dataSource : dataSourcesResult.getDataSources())
{
Log.i(TAG, "Data source found: " + dataSource.toString());
Log.i(TAG, "Data Source type: " + dataSource.getDataType().getName());
registerFitnessDataListener(dataSource, DataType.TYPE_HEART_RATE_BPM);
}
}
});
// dataSourceRequest = new DataSourcesRequest.Builder()
// .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE)
// .setDataSourceTypes(DataSource.TYPE_RAW)
// .build();
// 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");
}
}
@Override
public void onDataPoint(DataPoint dataPoint) {
for (final Field field : dataPoint.getDataType().getFields()) {
final Value value = dataPoint.getValue(field);
Log.i("DATASOURCE", field.getName());
Log.i("DATASOURCE", value.toString());
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView tv = (TextView) findViewById(R.id.tv1);
tv.setText("Field: " + field.getName() + " Value: " + value);
Toast.makeText(getApplicationContext(), "Field: " + field.getName() + " Value: " + value, Toast.LENGTH_SHORT).show();
}
});
}
}
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 {
TextView tv = (TextView) findViewById(R.id.tv1);
tv.setText("connected");
}
} else if (resultCode == RESULT_CANCELED) {
Log.e("GoogleFit", "Result_Canceled");
}
} else {
Log.e("GoogleFit", "Request not OAUTH");
}
}
private void registerFitnessDataListener(final DataSource dataSource, DataType dataType) {
SensorRequest request = new SensorRequest.Builder()
.setDataSource(dataSource)
.setDataType(dataType)
.setSamplingRate(2, TimeUnit.SECONDS)
.build();
Fitness.SensorsApi.add(mApiClient, request, this)
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
if (!status.isSuccess()) {
Log.e("DATASOURCES", "register " + dataSource.getName() + " failed");
} else {
Log.i("DATASOURCES", "register " + dataSource.getName() + " succeed");
}
}
});
}
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
如果(savedInstanceState!=null){
authInProgress=savedInstanceState.getBoolean(AUTH_挂起);
}
mApiClient=new GoogleAppClient.Builder(此)
.addApi(健身传感器\ API)
.addScope(新范围(范围.适应度\活动\读取))
.addScope(新范围(范围.适合度\正文\读取))
.addConnectionCallbacks(此)
.addOnConnectionFailedListener(此)
.build();
}
受保护的void onStart(){
super.onStart();
mApiClient.connect();
}
@凌驾
未连接的公共空间(捆绑包){
final DataSourcesRequest DataSourcesRequest=新建DataSourcesRequest.Builder()
.setDataTypes(数据类型.TYPE\u心率\u BPM)
.setDataSourceTypes(DataSource.TYPE_原始)
.build();
Fitness.SensorsApi.findDataSources(mApiClient,dataSourceRequest)
.setResultCallback(新的ResultCallback(){
@凌驾
public void onResult(DataSourcesResult DataSourcesResult){
对于(DataSource DataSource:dataSourcesResult.getDataSources())
{
Log.i(标记“找到的数据源:”+dataSource.toString());
Log.i(标记“数据源类型:”+dataSource.getDataType().getName());
registerFitnessDataListener(数据源,数据类型。类型\心率\ BPM);
}
}
});
//dataSourceRequest=新建dataSourceRequest.Builder()
//.setDataTypes(数据类型.类型\步骤\计数\累积)
//.setDataSourceTypes(DataSource.TYPE_原始)
//.build();
//Fitness.SensorsApi.findDataSources(mApiClient,dataSourceRequest)
//.setResultCallback(数据源ResultCallback);
}
@凌驾
公共空间连接暂停(int i){
}
@凌驾
公共无效onConnectionFailed(ConnectionResult ConnectionResult){
如果(!authInProgress){
试一试{
authInProgress=true;
connectionResult.startResolutionForResult(MainActivity.this,REQUEST_OAUTH);
}catch(IntentSender.sendtintentexe){
}
}否则{
Log.e(“谷歌拟合”、“authInProgress”);
}
}
@凌驾
公共无效数据点(数据点数据点){
for(最后一个字段:dataPoint.getDataType().getFields()){
最终值=dataPoint.getValue(字段);
Log.i(“DATASOURCE”,field.getName());
Log.i(“数据源”,value.toString());
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
TextView tv=(TextView)findViewById(R.id.tv1);
tv.setText(“字段:”+Field.getName()+“值:”+Value);
Toast.makeText(getApplicationContext(),“Field:”+Field.getName()+“Value:”+Value,Toast.LENGTH_SHORT).show();
}
});
}
}
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
if(requestCode==REQUEST\u OAUTH){
authInProgress=false;
if(resultCode==RESULT\u OK){
如果(!mApiClient.isConnecting()&&!mApiClient.isConnected()){
mApiClient.connect();
}否则{
TextView tv=(TextView)findViewById(R.id.tv1);
tv.setText(“已连接”);
}
}else if(resultCode==RESULT\u取消){
Log.e(“GoogleFit”、“结果被取消”);
}
}否则{
Log.e(“GoogleFit”,“请求非OAUTH”);
}
}
私有void registerFitnessDataListener(最终数据源数据源,数据类型数据类型){
SensorRequest=new SensorRequest.Builder()
.setDataSource(数据源)
.setDataType(数据类型)
.设置采样率(2,时间单位为秒)
.build();
Fitness.SensorsApi.add(mApiClient、request、this)
.setResultCallback(新的ResultCallback(){
@凌驾
公共void onResult(状态){
如果(!status.issucess()){
Log.e(“DATASOURCES”,“register”+dataSource.getName()+“failed”);
}否则{
Log.i(“DATASOURCES”,“register”+dataSource.getName()+“success”);
}
}
});
}
}
你知道我为什么不能获取数据吗?好的,当我发现这段代码在某人的手机上工作后,我发现你需要启用SmartBand2应用程序选项,以便将数据共享到Google Fit。出于某些原因,smartband 2无法独立于其应用程序连接到Google Fit