2016-03-30 39 views
1

我正在嘗試使用谷歌健身API來從索尼smartband2心率。問題是,我沒有得到任何讀數(即沒有調用onDataPoint方法)。心率傳感器正在被正確找到,如果我嘗試查找步驟數據,整個代碼也正常工作。無法從谷歌健身API與智能手環2獲取心率數據2

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"); 
        } 
       } 
      }); 
} 
} 

你有什麼想法,爲什麼我不能獲取數據?

回答

2

好的,當我發現此代碼正在某人的手機上工作後,我發現您需要啓用SmartBand2應用程序選項才能將數據共享給Google健身。出於某種原因,smartband 2無法連接到Google Fit,與其應用程序無關。