2016-04-23 14 views
2

ステップイング数が> 0かどうかを確認して、誰かがGoogle Fit APIを使用して歩いているかどうかを確認したいと思っています。それが以前のクエリから増加したかどうかを調べる。Google Fitからライブステップカウンターの更新を取得しない

私はコードhereに従っていますが、位置追跡の代わりにデルタステップカウントを行います。ただし、リスナーは最新のデルタステップ数を取得していないようです。

は、ここに私のコードです:

public void buildFitnessClient() 
{ 
    if (mClient == null && checkPermissions()) 
    { 
     mClient = new GoogleApiClient.Builder(this) 
       .addApi(Fitness.SENSORS_API) 
       .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ)) 
       .addConnectionCallbacks(
         new GoogleApiClient.ConnectionCallbacks() 
         { 
          @Override 
          public void onConnected(Bundle bundle) 
          { 
           Log.d(TAG, "Connected!!!"); 
           // Now you can make calls to the Fitness APIs. 
           findFitnessDataSources(); 
          } 

          @Override 
          public void onConnectionSuspended(int i) 
          { 
           // If your connection to the sensor gets lost at some point, 
           // you'll be able to determine the reason and react to it here. 
           if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST) 
            Log.d(TAG, "Connection lost. Cause: Network Lost."); 
           else if (i 
             == GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED) 
            Log.d(TAG, "Connection lost. Reason: Service Disconnected"); 
          } 
         } 
       ) 
       .enableAutoManage(this, 0, new GoogleApiClient.OnConnectionFailedListener() 
       { 
        @Override 
        public void onConnectionFailed(ConnectionResult result) 
        { 
         Log.d(TAG, "Google Play services connection failed. Cause: " + 
           result.toString()); 
        } 
       }) 
       .build(); 
    } 
} 

private void findFitnessDataSources() 
{ 
    // 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_DERIVED) 
      .build()) 
      .setResultCallback(new ResultCallback<DataSourcesResult>() 
      { 
       @Override 
       public void onResult(DataSourcesResult dataSourcesResult) 
       { 
        Log.d(TAG, "Result: " + dataSourcesResult.getStatus().toString()); 
        for (DataSource dataSource : dataSourcesResult.getDataSources()) 
        { 
         Log.d(TAG, "Data source found: " + dataSource.toString()); 
         Log.d(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.d(TAG, "Data source for STEP_COUNT_DELTA found! Registering."); 
          registerFitnessDataListener(dataSource, 
            DataType.TYPE_STEP_COUNT_DELTA); 
         } 
        } 
       } 
      }); 
} 

private void registerFitnessDataListener(DataSource dataSource, DataType typeStep) 
{ 
    mListener = new OnDataPointListener() 
    { 
     @Override 
     public void onDataPoint(DataPoint dataPoint) 
     { 
      Log.d(TAG, "Detected onDataPoint"); 
      for (Field field : dataPoint.getDataType().getFields()) 
      { 
       Value val = dataPoint.getValue(field); 
       Log.d(TAG, "Detected DataPoint field: " + field.getName()); 
       Log.d(TAG, "Detected DataPoint value stepCount: " + val); 
       TransientValues.setStepCountDelta(val.asInt()); 
      } 
     } 
    }; 


    Fitness.SensorsApi.add(
      mClient, 
      new SensorRequest.Builder() 
        .setDataSource(dataSource) // Optional but recommended for custom data sets. 
        .setDataType(typeStep) // Can't be omitted. 
        .setSamplingRate(1L, TimeUnit.SECONDS) 
        .build(), 
      mListener) 
      .setResultCallback(new ResultCallback<Status>() 
      { 
       @Override 
       public void onResult(Status status) 
       { 
        if (status.isSuccess()) Log.d(TAG, "Listener registered!"); 
        else Log.d(TAG, "Listener not registered."); 
       } 
      }); 
} 

onDataPoint方法はmListener = onDataPointListener(){...} -> registerFitnessDataListener(...)で呼び出されていないと私はなぜわかりません。

+0

解決方法を見つけましたか?私は私のアプリで同じ問題を抱えている – appLogic

+0

私はdidnt。ライブの更新があるかどうかを確認するためにリンクしたサンプルを複製しようとします。 –

答えて

0

てみてください、あなたのクラス

implements OnDataPointListener 

にこれを実装することによって、私は同じ問題を抱えていたし、これはそれを修正しました。それが助けられたら教えてください。

+0

私はそれを試してもうまくいかなかった。 –