package com.tutsplus.googlefitrecordingapi; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; 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.FitnessStatusCodes; import com.google.android.gms.fitness.data.DataType; import com.google.android.gms.fitness.data.Field; import com.google.android.gms.fitness.data.Subscription; import com.google.android.gms.fitness.result.ListSubscriptionsResult; public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, View.OnClickListener { private Button mCancelSubscriptionsBtn; private Button mShowSubscriptionsBtn; private ResultCallback<Status> mSubscribeResultCallback; private ResultCallback<Status> mCancelSubscriptionResultCallback; private ResultCallback<ListSubscriptionsResult> mListSubscriptionsResultCallback; private GoogleApiClient mGoogleApiClient; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); initCallbacks(); mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Fitness.RECORDING_API) .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ)) .addConnectionCallbacks(this) .enableAutoManage(this, 0, this) .build(); } private void initViews() { mCancelSubscriptionsBtn = (Button) findViewById(R.id.btn_cancel_subscriptions); mShowSubscriptionsBtn = (Button) findViewById(R.id.btn_show_subscriptions); mCancelSubscriptionsBtn.setOnClickListener(this); mShowSubscriptionsBtn.setOnClickListener(this); } private void initCallbacks() { mSubscribeResultCallback = new ResultCallback<Status>() { @Override public void onResult(@NonNull Status status) { if (status.isSuccess()) { if (status.getStatusCode() == FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) { Log.e( "RecordingAPI", "Already subscribed to the Recording API"); } else { Log.e("RecordingAPI", "Subscribed to the Recording API"); } } } }; mCancelSubscriptionResultCallback = new ResultCallback<Status>() { @Override public void onResult(@NonNull Status status) { if (status.isSuccess()) { Log.e( "RecordingAPI", "Canceled subscriptions!"); } else { // Subscription not removed Log.e("RecordingAPI", "Failed to cancel subscriptions"); } } }; mListSubscriptionsResultCallback = new ResultCallback<ListSubscriptionsResult>() { @Override public void onResult(@NonNull ListSubscriptionsResult listSubscriptionsResult) { for (Subscription subscription : listSubscriptionsResult.getSubscriptions()) { DataType dataType = subscription.getDataType(); Log.e( "RecordingAPI", dataType.getName() ); for (Field field : dataType.getFields() ) { Log.e( "RecordingAPI", field.toString() ); } } } }; } private void cancelSubscriptions() { Fitness.RecordingApi.unsubscribe(mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA) .setResultCallback(mCancelSubscriptionResultCallback); } private void showSubscriptions() { Fitness.RecordingApi.listSubscriptions(mGoogleApiClient) .setResultCallback(mListSubscriptionsResultCallback); } @Override public void onConnected(@Nullable Bundle bundle) { Fitness.RecordingApi.subscribe(mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA) .setResultCallback(mSubscribeResultCallback); } @Override public void onConnectionSuspended(int i) { Log.e("RecordingAPI", "onConnectionSuspended"); } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { Log.e("RecordingAPI", "onConnectionFailed"); } @Override public void onClick(View v) { switch(v.getId()) { case R.id.btn_cancel_subscriptions: { cancelSubscriptions(); break; } case R.id.btn_show_subscriptions: { showSubscriptions(); break; } } } }