【问题标题】:Google Fit - The connection to Google Play services was lostGoogle Fit - 与 Google Play 服务的连接丢失
【发布时间】:2021-06-22 16:24:51
【问题描述】:

我从 google fit api 收到此错误。它不会每次都发生,但如果我收到此错误,那么在我卸载应用程序之前我无法获取我的步数数据。我为我的应用正确配置了 OAuth 2.0 客户端身份验证。但有时我仍然会收到此错误

“com.google.android.gms.common.api.ApiException: 8: 与 Google Play 服务的连接丢失”

当我从谷歌文档中调查它时,它告诉我:

https://developers.google.com/android/reference/com/google/android/gms/common/api/CommonStatusCodes public static final int INTERNAL_ERROR

正如文档所说,当我尝试在 onfailure 方法上连接 googlefit 时,没有发生任何事情,仍然面临这个问题。

发生内部错误。重试应该可以解决问题。 常数值:8

这里是代码块,有时会触发 onfailure 方法

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

            Fitness.getHistoryClient(MainActivity.activity, GoogleSignIn.getLastSignedInAccount(MainActivity.activity))
                    .readData(readRequest)
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Crashlytics.log(Log.ASSERT, "fail  :", e.toString());
                        }
                    })
                    .addOnSuccessListener(new OnSuccessListener<DataReadResponse>()
                    {
                        @Override
                        public void onSuccess(DataReadResponse dataReadResponse)
                        {
                            for (Bucket bucket : dataReadResponse.getBuckets())
                            {

                                for (DataSet dataSet : bucket.getDataSets())
                                {
                                    for (DataPoint dataPoint : dataSet.getDataPoints())
                                    {

                                        User.current().userFitnessData.totalDistance = dataPoint.getValue(dataPoint.getDataType().getFields().get(0)).asFloat();
                                    }
                                }
                            }

                            Crashlytics.log(Log.ASSERT, "Todays Steps", User.current().userFitnessData.getTodaysSteps() + "");
                            if (callBack != null)
                                callBack.onDistanceDataReceived();
                        }
                    });

【问题讨论】:

  • API 的错误是最严重的错误...我会尝试调查正在发布的 HTTP 请求以及您得到的响应。

标签: android google-fit


【解决方案1】:

我不确定它是否有帮助,但我总是在调用每个 Fitness Api 之前检查这个函数。

public boolean isGoogleAccountSignIn(int requestCode){
    // permission you need
    FitnessOptions fitnessOptions = FitnessOptions.builder()
            .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_WRITE)
            .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_WRITE)
            .addDataType(DataType.TYPE_ACTIVITY_SEGMENT, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_ACTIVITY_SEGMENT, FitnessOptions.ACCESS_WRITE)
            .build();

    if (!GoogleSignIn.hasPermissions(GoogleSignIn.getLastSignedInAccount(context), fitnessOptions)) {
        GoogleSignIn.requestPermissions((Activity) context, requestCode, GoogleSignIn.getLastSignedInAccount(context), fitnessOptions);
        return false;
    } else {
        return true;
    }
}

在 MainActivity 中,每个动作我都会这样做:

if (fitnessManager.isGoogleAccountSignIn(FitnessManager.REQUEST_CODE_ASK_ACCOUNT)) {
    // use Fitness Api you need
    fitnessManager.getDailyDataFromMobileInSegment(getLastWeekTime(), getTodayEndTime(), false);
}

我使用的play-services-fitnessplay-services-auth的版本都在11.6.0以上。

【讨论】:

  • 感谢您的帮助,但我已经先检查了 google 连接。
【解决方案2】:

对于拥有大量数据的用户也有同样的异常——所以我认为这是 Google API 中的一些超时。将尝试按每日块获取数据,而不是每周块

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2013-05-28
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    相关资源
    最近更新 更多