2016-08-06 2 views
0

私は、Google適合APIを使用してユーザーの手順を追跡するアプリケーションを作成しています。私はonDataPointメソッドを複数回呼び出すようになっています。私のコードは、場所がステップで置き換えられている点を除いて、Google適合のサンプルコードのほぼ完全なコピーです。Googleフィットネスセンサー:onDataPointが呼び出されていない

サンプルコードはfound hereです。それは私がテストしているコードと非常によく似ています。

ここに私のコードです。どんな助けでも大いに感謝されます、私は全部見渡して解決策を見つけることができませんでした。

private void findFitnessDataSources() { 
    // [START find_data_sources] 
    // Note: Fitness.SensorsApi.findDataSources() requires the ACCESS_FINE_LOCATION permission. 
    Fitness.SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder() 
      // At least one datatype must be specified. 
      .setDataTypes(DataType.TYPE_STEP_COUNT_DELTA) 
      // Can specify whether data type is raw or derived. 
      .setDataSourceTypes(DataSource.TYPE_RAW) 
      .build()) 
      .setResultCallback(new ResultCallback<DataSourcesResult>() { 
       @Override 
       public void onResult(DataSourcesResult dataSourcesResult) { 
        Log.i(TAG, "Result: " + dataSourcesResult.getStatus().toString()); 
        for (DataSource dataSource : dataSourcesResult.getDataSources()) { 
         Log.i(TAG, "Data source found: " + dataSource.toString()); 
         Log.i(TAG, "Data Source type: " + dataSource.getDataType().getName()); 

         //Let's register a listener to receive Activity data! 
         if (dataSource.getDataType().equals(DataType.TYPE_STEP_COUNT_DELTA) 
           && mListener == null) { 
          Log.i(TAG, "Data source for LOCATION_SAMPLE found! Registering."); 
          registerFitnessDataListener(dataSource, 
            DataType.TYPE_STEP_COUNT_DELTA); 
         } 
        } 
       } 
      }); 
} 


private void registerFitnessDataListener(DataSource dataSource, DataType dataType) { 
    // [START register_data_listener] 
    mListener = new OnDataPointListener() { 
     @Override 
     public void onDataPoint(DataPoint dataPoint) { 
      for (Field field : dataPoint.getDataType().getFields()) { 
       Value val = dataPoint.getValue(field); 
       Log.i(TAG, "Detected DataPoint field: " + field.getName()); 
       Log.i(TAG, "Detected DataPoint value: " + val); 
      } 
     } 
    }; 

    Fitness.SensorsApi.add(
      mClient, 
      new SensorRequest.Builder() 
        .setDataSource(dataSource) // Optional but recommended for custom data sets. 
        .setDataType(dataType) // Can't be omitted. 
        .setSamplingRate(1, 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."); 
        } 
       } 
      }); 
} 
+0

'.setDataSourceTypes(DataSource.TYPE_RAW)'をコメントアウトしてみてください。デフォルトの 'STEP_COUNT_DELTA''' DataSource'は生のセンサータイプではないと思います。私は今これを置くのは簡単なコードがないので、それが問題なのかどうか、私に知らせてください。 –

答えて

2

問題はlater SO questionで解決され、私の疑惑は正しいものでした。問題はTYPE_STEP_COUNT_DELTAが生データ型でないことです。Google uses a combination of sensors, accelerometer, machine learning, etc. to determine step countです。したがって、.setDataSourceTypes(DataSource.TYPE_RAW)行を削除する必要があります。

実際、他の質問のOPは、行を削除するだけでDataSource.TYPE_DERIVEDに置き換えるよりも正確さが劣ることに気付きました。

+0

onData Pointは1回だけ呼び出されます。なぜですか? –

+0

Hm、あなたはそれがまだ一度だけ呼び出されていて、値は0であると言っていますか?そして、あなたは周りを回っていますよね? –

+0

はい...正確に。 –

1

google fitのstep_countには、累積、デルタなどのすべての派生データ型が使用されています。 私のアプリの結果は10反復で観察されました。 は、私はGoogleが提供される

  • グーグルフィットAPIのみ すべてSTEP_COUNTのための派生データ型を使用していることを発見しました。
  • また、データ型を指定することはできませんが、Google Fitアプリと比較して結果が異なる場合があります。

Google Fit faqセクションにも同じことが言及されています。 [https://developers.google.com/fit/faq

関連する問題