2016-08-08 3 views
-1

ステップカウントを取得できません。私はonDataPointメソッドを呼び出すことに固執しています。このコードはほぼ正しいです。私はステップカウントが表示されていない理由を見つけることができません。Google適合API、onDatapointメソッドが呼び出されていません

package com.example.akkisocc.heath; 


import android.content.Intent; 
import android.content.IntentSender; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.Scopes; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.common.api.Scope; 
import com.google.android.gms.common.api.Status; 
import com.google.android.gms.fitness.Fitness; 
import com.google.android.gms.fitness.data.DataPoint; 
import com.google.android.gms.fitness.data.DataSource; 
import com.google.android.gms.fitness.data.DataType; 
import com.google.android.gms.fitness.data.Field; 
import com.google.android.gms.fitness.data.Value; 
import com.google.android.gms.fitness.request.DataSourcesRequest; 
import com.google.android.gms.fitness.request.OnDataPointListener; 
import com.google.android.gms.fitness.request.SensorRequest; 
import com.google.android.gms.fitness.result.DataSourcesResult; 

import java.util.concurrent.TimeUnit; 

public class MainActivity extends AppCompatActivity implements OnDataPointListener, 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 
    private static final int REQUEST_OAUTH = 1; 
    private static final String AUTH_PENDING = "auth_state_pending"; 
    TextView msg; 
    private boolean authInProgress = false; 
    private GoogleApiClient mApiClient; 

    @Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     msg = (TextView) findViewById(R.id.msg); 
     msg.setText("On Create"); 
Log.e("GoogleFit", "Oncreate"); 

     if (savedInstanceState != null) { 
      authInProgress = savedInstanceState.getBoolean(AUTH_PENDING); 
     } 

     mApiClient = new GoogleApiClient.Builder(this) 
       .addApi(Fitness.SENSORS_API) 
       .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE)) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .build(); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     mApiClient.connect(); 
    } 

    @Override 
    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 if (resultCode == RESULT_CANCELED) { 
       Log.e("GoogleFit", "RESULT_CANCELED"); 
      } 
     } else { 
      Log.e("GoogleFit", "requestCode NOT request_oauth"); 
     } 
    } 

    @Override 
    public void onConnected(Bundle bundle) { 
     DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder() 
       .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE) 
       .setDataSourceTypes(DataSource.TYPE_RAW) 
       .build(); 

     ResultCallback<DataSourcesResult> dataSourcesResultCallback = new ResultCallback<DataSourcesResult>() { 
      @Override 
      public void onResult(DataSourcesResult dataSourcesResult) { 
       for (DataSource dataSource : dataSourcesResult.getDataSources()) { 
        if (DataType.TYPE_STEP_COUNT_CUMULATIVE.equals(dataSource.getDataType())) { 
         registerFitnessDataListener(dataSource, DataType.TYPE_STEP_COUNT_CUMULATIVE); 
        } 
       } 
      } 
     }; 

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

    } 

    private void registerFitnessDataListener(DataSource dataSource, DataType dataType) { 

     SensorRequest request = new SensorRequest.Builder() 
       .setDataSource(dataSource) 
       .setDataType(dataType) 
       .setSamplingRate(3, TimeUnit.SECONDS) 
       .build(); 

     Fitness.SensorsApi.add(mApiClient, request, this) 
       .setResultCallback(new ResultCallback<Status>() { 
        @Override 
        public void onResult(Status status) { 
         if (status.isSuccess()) { 
          Log.e("GoogleFit", "SensorApi successfully added"); 
         } 
        } 
       }); 
    } 

    @Override 
    public void onDataPoint(DataPoint dataPoint) { 
     for (final Field field : dataPoint.getDataType().getFields()) { 
      final Value value = dataPoint.getValue(field); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(getApplicationContext(), "Field: " + field.getName() + " Value: " + value, Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } 
    } 
} 
+0

私はあなたの直前の[google-fit question](http://stackoverflow.com/questions/38799685/google-fitness-sensors-ondatapoint-not-being-called)でこれを言っていましたが、すでに試してみましたか'.setDataSourceTypes(DataSource.TYPE_RAW)'を削除しますか?私はステップ数が生データ型だとは思わない。 –

+0

これは問題ではない場合は、コードを[最小限で完全で検証可能な例](http://stackoverflow.com/help/mcve)にスリム化し、問題を絞り込んで問題を絞り込んでください。誰かがコード全体を最初からデバッグすることは期待できません。 –

+0

ありがとうMatthew、私は今、完全にアプリケーションを実行することができます。私は生データをコメントすることが時々不正確な値を与えることに気づいた。生データから派生データ型をうまく変更しています。 –

答えて

0

(コメントで解くように)問題がTYPE_STEP_COUNT_CUMULATIVEGoogle uses a combination of sensors, accelerometer, machine learning, etc. to determine step countタイプ - 生データではないということです。したがって、.setDataSourceTypes(DataSource.TYPE_RAW)行を削除する必要があります。

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

また、Google Fit FAQは、TYPE_DERIVEDを使用する例があります。

関連する問題