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.