Elektro
Elektro

Reputation: 315

Google Fit Listen for Data Updates not working

I'm trying to implement a Google Fit Listener when data is updated into Google Fit services.

In this link of Google Fit documentation there is a simple example, however, it is not 100% clear. For that reason, I have two problems:

  1. I don't know how to implement mResultCallback variable (there aren't any examples in this documentation).
  2. When I define a simple ResultCallback (it seems to work but I'm not sure) and I launch the application, it gives me a result error code: java.lang.SecurityException: Signature check failed

Upvotes: 3

Views: 696

Answers (2)

Patrick McBride
Patrick McBride

Reputation: 36

The code within the HistortyApi lists one of android.permission.ACCESS_FINE_LOCATION or android.permission.BODY_SENSORS as being required.

Adding those permissions to my code hasn't resolved the same problem though.

Confirmed bug in Google Fit services. See discussion in https://plus.google.com/110141422948118561903/posts/Lqri4LVR7cD

Upvotes: 2

Matthew Woo
Matthew Woo

Reputation: 1378

mResultCallback is a ResultCallback<Status> so you need to implement a class of that type. Documentation is here, but there's only one method you need to implement:

public abstract void onResult (Status result)

The standard way is to do this using an anonymous class either when you declare mResultCallback or when you're using it as a parameter. Below is an example from Google's BasicRecordingAPI example:

Fitness.RecordingApi.subscribe(mClient, DataType.TYPE_ACTIVITY_SAMPLE)
    .setResultCallback(new ResultCallback<Status>() {
        @Override
        public void onResult(Status status) {
            if (status.isSuccess()) {
                if (status.getStatusCode()
                        == FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) {
                    Log.i(TAG, "Existing subscription for activity detected.");
                } else {
                    Log.i(TAG, "Successfully subscribed!");
                }
            } else {
                Log.i(TAG, "There was a problem subscribing.");
            }
        }
});

If you want to use a member variable you can simply make an assignment instead:

ResultCallback<Status> mResultCallback = new ResultCallback<Status>() {
    @Override
    public void onResult(Status status) {
        ...
    }
});

Of course you can define a non-anonymous class, but if you did that for every callback you had you would end up creating a LOT of classes.

Upvotes: 0

Related Questions