1
私のアプリにGoogle Fitness APIを統合しようとしています。Google Fit UserログインからGrantにアクセスすることはありません
Google Fitにログインするようユーザーにログインすると、決して通過しません。 私はいつもRESULT_CANCELED
をonActivityResult()
に入れています。
何が問題なのですか?
以下は私の実装です。
// Google Fit Related
public static final int REQUEST_OAUTH = 10101;
private static final String AUTH_PENDING = "auth_state_pending";
private boolean authInProgress = false;
private GoogleApiClient mGoogleApiClient;
private static final int REQUEST_PERMISSIONS_REQUEST_CODE = 34;
private void coonectGoogleFit() {
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.addApi(Fitness.SENSORS_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
@Override
public void onConnected(Bundle bundle) {
DataSourcesRequest dataSourcesRequest = new DataSourcesRequest.Builder()
.setDataTypes(DataType.TYPE_STEP_COUNT_DELTA)
.setDataSourceTypes(DataSource.TYPE_RAW)
.build();
ResultCallback<DataSourcesResult> dataSourcesResultResultCallback = new ResultCallback<DataSourcesResult>() {
@Override
public void onResult(DataSourcesResult dataSourcesResult) {
for(DataSource dataSource : dataSourcesResult.getDataSources()) {
if(DataType.TYPE_STEP_COUNT_DELTA.equals(dataSource.getDataType())) {
registerFitnessDataListener(dataSource, DataType.TYPE_STEP_COUNT_DELTA);
}
}
}
};
Fitness.SensorsApi.findDataSources(mGoogleApiClient, dataSourcesRequest)
.setResultCallback(dataSourcesResultResultCallback);
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if(!authInProgress) {
try {
authInProgress = true;
Log.e("ConnectionResult", connectionResult+"");
connectionResult.startResolutionForResult(getActivity(), REQUEST_OAUTH);
} catch (IntentSender.SendIntentException e) {
Log.e("IntentSender", e.getMessage());
}
} else {
Log.e("GoogleFit", "authInProgress");
}
}
@Override
public void onDataPoint(DataPoint dataPoint) {
for(final Field field : dataPoint.getDataType().getFields()) {
final Value value = dataPoint.getValue(field);
new Runnable() {
@Override
public void run() {
circleProgressBar.setProgressWithAnimation(value.asFloat(), 500);
circleProgressBar.setText(value.asFloat()+"", 72, Color.parseColor("#25DDA5"));
}
};
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_OAUTH) {
authInProgress = false;
Log.i("ResultCode", resultCode+"");
Log.i("CANCELED", getActivity().RESULT_CANCELED+"");
if(resultCode == getActivity().RESULT_OK) {
Log.e("GoogleFit", "RESULT_OK");
if(!mGoogleApiClient.isConnecting() && !mGoogleApiClient.isConnected()) {
mGoogleApiClient.connect();
}
} else if(resultCode == getActivity().RESULT_CANCELED) {
Log.e("GoogleFit", "RESULT_CANCELED");
}
} else {
Log.e("GoogleFit", "requestCode Not request_oauth");
}
}
private void registerFitnessDataListener(DataSource dataSource, DataType dataType) {
SensorRequest request = new SensorRequest.Builder()
.setDataSource(dataSource)
.setDataType(dataType)
.setSamplingRate(1, TimeUnit.SECONDS)
.build();
Fitness.SensorsApi.add(mGoogleApiClient, request, this)
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
if(status.isSuccess()) {
Log.i("GoogleFit", "Sensor Api successfully Added");
}
}
});
}
お返事ありがとうございます。 [Google Fit](https://developers.google.com/fit/)のスタートガイドを読んだ。 最近、間違ったOAuth 2.0クライアントIDコードを使用していたことがわかりました。一度修正してもうまくいきました。 –