Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t使用smartband 2从google fit API获取心率数据_Java_Android_Sony_Google Fit_Google Fit Sdk - Fatal编程技术网

Java Can';t使用smartband 2从google fit API获取心率数据

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

我正在尝试使用google Fit API从sony smartband2获取心率。问题是,我并没有得到任何读数(即,并没有调用onDataPoint方法)。心率传感器被正确地找到了,如果我试图寻找阶跃数据,整个代码也工作正常

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