0

Getting error while Using google fit API for Fetching User's google-fit data.

I have 2 modules in my project one for mobile and second one is watch-face for wear-OS.Everything is working fine in my mobile application, I am getting all the data I want but getting error in my watch.

Error... googleAccount:- com.google.android.gms.auth.api.signin.GoogleSignInAccount@AcountName 2022-11-02 12:38:04.212 19304-19304/? E/TAGGGGG: OnFailure() com.google.android.gms.common.api.ApiException: 17: API: Fitness.CLIENT is not available on this device. Connection failed with: ConnectionResult{statusCode=INVALID_ACCOUNT, resolution=null, message=null}

I have double check manifest and gradle and also gave all the google fit related permissions. I am getting response in my mobile but it is giving me error in my watchface. I am using same google account for testing but still not understand why I am not getting data.

Manifest...

<queries>
        <package android:name="com.google.android.apps.fitness" />
    </queries>

    <uses-feature android:name="android.hardware.type.watch" />
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

    <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
    <uses-permission android:name="android.gms.permission.ACTIVITY_RECOGNITION"/>
    <uses-permission android:name="android.permission.BODY_SENSORS"/>
    <uses-permission android:name="android.gms.permission.BODY_SENSORS"/>

google-fit request code...



private void googleFitSignIn() {

        // requestPermissionLauncher(Manifest.permission.ACCESS_FINE_LOCATION);

        FitnessOptions fitnessOptions = FitnessOptions.builder()
                .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
                .addDataType(DataType.AGGREGATE_DISTANCE_DELTA, FitnessOptions.ACCESS_READ)
                .addDataType(DataType.AGGREGATE_HEART_RATE_SUMMARY, FitnessOptions.ACCESS_READ)
                .build();

        googleAccount = GoogleSignIn.getAccountForExtension(mAppContext, fitnessOptions);
        //googleAccount = GoogleSignIn.getAccountForExtension((AppCompatActivity) getActivity(), fitnessOptions);
        if (!GoogleSignIn.hasPermissions(googleAccount, fitnessOptions)) {
            /*if (BuildConfig.DEBUG){
                Log.e("TAGGGGG", "if (!GoogleSignIn.hasPermissions(googleAccount, fitnessOptions))");
            }*/
           /* GoogleSignIn.requestPermissions(
                    requireActivity(), // your activity
                    Defines.GOOGLE_FIT_PERMISSIONS_REQUEST_CODE, // e.g. 1
                    googleAccount,
                    fitnessOptions);*/

            GoogleSignIn.requestPermissions(
//                    (AppCompatActivity) getActivity(),
                    requireActivity(),
//                    this,
                    Defines.GOOGLE_FIT_PERMISSIONS_REQUEST_CODE_A1,

                    googleAccount,
//                    GoogleSignIn.getLastSignedInAccount((AppCompatActivity) getActivity()),
                    fitnessOptions);

            linearFitAccess.setVisibility(View.VISIBLE);
            linearFitnessView.setVisibility(View.GONE);

            dialog = new ProgressDialog(mAppContext);
            dialog.setMessage(mAppContext.getResources().getString(R.string.pleaseWait));
            dialog.setCanceledOnTouchOutside(false);
            dialog.show();


        } else {
           /* if (BuildConfig.DEBUG){
                Log.e("TAGGGGG", "Elsssss accessGoogleFit");
            }*/
            linearFitAccess.setVisibility(View.GONE);
            linearFitnessView.setVisibility(View.VISIBLE);

            accessGoogleFit();
        }

    }

private void accessGoogleFit() {

        Calendar cal = Calendar.getInstance();
        Date now = new Date();
        cal.setTime(now);
        long endTime = cal.getTimeInMillis();
        cal.add(Calendar.WEEK_OF_YEAR, -1);
        long startTime = cal.getTimeInMillis();

        DataReadRequest readRequest = new DataReadRequest.Builder()
                .read(DataType.AGGREGATE_STEP_COUNT_DELTA)
                .read(DataType.AGGREGATE_DISTANCE_DELTA)
                .read(DataType.AGGREGATE_HEART_RATE_SUMMARY)
                .bucketByTime(1, TimeUnit.DAYS)
                .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                .build();

        Fitness.getHistoryClient(mAppContext, googleAccount)
                .readData(readRequest)
                .addOnSuccessListener(dataReadResponse -> {

                            Log.e("TAGGGGG", "A DR");
//                            Log.e("TAG_F", "onSuccess: size " + dataReadResponse.getBuckets().size());
                            for (int i = 0; i < dataReadResponse.getBuckets().size(); i++) {
                                Bucket bucket = dataReadResponse.getBuckets().get(i);
//                                Log.e("TAG_F", "onSuccess:  bucket.getDataSets().size() " + bucket.getDataSets().size());
                                showDataSet(bucket.getDataSets().get(0));
                            }
                        }
                ).addOnFailureListener(e -> {
//            if (BuildConfig.DEBUG) {
            Log.e("TAGGGGG", "OnFailure() " + e);
//            }
        });
    }


build.gradle....

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.support:wearable:2.8.1'
    implementation 'com.google.android.gms:play-services-wearable:17.0.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.wear:wear:1.1.0'
    implementation 'com.github.PhilJay:MPAndroidChart:v3.0.2'
    implementation 'com.squareup.okhttp:okhttp:2.7.5'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'com.google.android.gms:play-services-fitness:21.1.0'
    implementation 'com.google.android.gms:play-services-auth:20.2.0'
    compileOnly 'com.google.android.wearable:wearable:2.8.1'
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'com.github.arturogutierrez:badges:1.0.5@aar'
    implementation 'joda-time:joda-time:2.3'
    implementation 'pl.pawelkleczkowski.customgauge:CustomGauge:1.0.4'

    implementation 'com.google.android.gms:play-services-fitness-license:12.0.1'
    implementation 'com.google.android.gms:play-services-fitness:21.1.0'
    implementation 'com.google.android.gms:play-services-auth:20.2.0'


}

I have spent lot of time searching online and reading documentation but no luck.

Any help on this will be really help-full. Thanks in advance.

0 Answers0