You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:06:02