Wear OS表盘调用Google Fit API报错:Fitness.CLIENT不可用
Wear OS 表盘调用 Google Fit API 报错排查求助
我开发的项目包含手机应用与 Wear OS 表盘两个模块,手机端调用 Google Fit API 获取用户健身数据一切正常,但 Wear OS 表盘端出现如下报错:
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}
我已核对 Manifest 权限配置、Gradle 依赖,授予了所有 Google Fit 相关权限,且使用同一谷歌账号测试,但仍无法获取数据。以下是相关配置及代码信息,恳请协助解决:
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 请求代码
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); // } }); }
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' }
内容的提问来源于stack exchange,提问作者Deep Mashru
相关产品推荐
相关产品推荐

