2016-03-31 10 views
0

Google Fit Sensor Apiを使用してカロリーと距離を取得できますか? 私は毎秒更新する必要がある現在のデータを表示する必要があるリアルタイムフィットネスアプリを作成します。Google Fit Sensor Apiを使用してカロリーと距離を取得できますか?

自分のやり方でセッションApiまたは履歴APIを使用するのは良い考えではないと思います。 私が間違っている場合は、私を修正してください。私は

追加リアルタイムで唯一の手動取得の手順を見つけることができる: を仕事だけTYPE_STEP_COUNT_CUMULATIVE以下のコードでは、例えばTYPE_DISTANCE_CUMULATIVEが

ここ
private void buildFitnessClient() { 
    if (mClient == null) { 
     mClient = new GoogleApiClient.Builder(getActivity()) 
       .addApi(Fitness.SENSORS_API) 
       .addScope(new Scope(Scopes.FITNESS_LOCATION_READ)) 
       .addConnectionCallbacks(
         new GoogleApiClient.ConnectionCallbacks() { 
          @Override 
          public void onConnected(Bundle bundle) { 
           Log.i(TAG, "Connected!!!"); 
           findFitnessDataSources(); 
          } 

          @Override 
          public void onConnectionSuspended(int i) { 

           if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST) { 
            Log.i(TAG, "Connection lost. Cause: Network Lost."); 
           } else if (i 
             == GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED) { 
            Log.i(TAG, 
              "Connection lost. Reason: Service Disconnected"); 
           } 
          } 
         } 
       ) 
       .enableAutoManage((MainActivity)getActivity(), 0, new GoogleApiClient.OnConnectionFailedListener() { 
        @Override 
        public void onConnectionFailed(ConnectionResult result) { 
         Log.i(TAG, "Google Play services connection failed. Cause: " + 
           result.toString()); 
        } 
       }) 
       .build(); 
    } 
} 

private void findFitnessDataSources() { 

    Fitness.SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder() 
      .setDataTypes(DataType.TYPE_DISTANCE_CUMULATIVE) 
      .setDataSourceTypes(DataSource.TYPE_RAW) 
      .build()) 
      .setResultCallback(new ResultCallback<DataSourcesResult>() { 
       @Override 
       public void onResult(DataSourcesResult dataSourcesResult) { 
        for (DataSource dataSource : dataSourcesResult.getDataSources()) { 
         if (DataType.TYPE_DISTANCE_CUMULATIVE.equals(dataSource.getDataType())) { 
          registerFitnessDataListener(dataSource, DataType.TYPE_DISTANCE_CUMULATIVE); 
         } 
        } 
       } 
      }); 
} 

private void registerFitnessDataListener(DataSource dataSource, DataType dataType) { 
    mListener = new OnDataPointListener() { 
     @Override 
     public void onDataPoint(DataPoint dataPoint) { 
      for (final Field field : dataPoint.getDataType().getFields()) { 
       final Value val = dataPoint.getValue(field); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getActivity(), "Field: " + field.getName() + " Value: " + val, Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     } 
    }; 

    Fitness.SensorsApi.add(
      mClient, 
      new SensorRequest.Builder() 
        .setDataSource(dataSource) 
        .setDataType(dataType) 
        .setSamplingRate(3, TimeUnit.SECONDS) 
        .build(), 
      mListener) 
      .setResultCallback(new ResultCallback<Status>() { 
       @Override 
       public void onResult(Status status) { 
        if (status.isSuccess()) { 
         Log.i(TAG, "Listener registered!"); 
        } else { 
         Log.i(TAG, "Listener not registered."); 
        } 
       } 
      }); 
} 

答えて

1

YES! You can

が文書で動作していない何できないことができます。カスタムデータ値も行うことができます。

+0

Sensor Api(履歴ApiまたはセッションAPIではなく)を使用していることを確認してください。TYPE_DISTANCE_CUMULATIVなどのタイプで作業できますか? – Devnock

+0

私はなぜそうは見えないのですか?それを試してみてください。そう信じる。 – Auriga

関連する問題