首页 > 解决方案 > 获取“消息”:“无权读取此私有数据源的数据。” 对于 TYPE_LOCATION_SAMPLE 和 TYPE_LOCATION_TRACK

问题描述

任何人都可以让我知道如何解决这个问题,是这个范围问题还是其他问题。网址:https ://www.googleapis.com/fitness/v1/users/me/dataset:aggregate

  "error": {
    "status": "PERMISSION_DENIED", 
    "message": "No permission to read data for this private data source.", 
    "code": 403, 
    "errors": [
      {
        "reason": "forbidden", 
        "message": "No permission to read data for this private data source.", 
        "domain": "global"
      }
    ]
  }
}```

标签: google-fit

解决方案


您首先需要访问 GPS,因此您应该将权限添加到您的manifest.xml文件中:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.fitness.sync">

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
....

在您的代码中,您应该将权限传递给登录帐户,如下所示:

public void signIn(){
    FitnessOptions fitnessOptions = FitnessOptions.builder()
            // add your read & write permissions here
            .addDataType(DataType.TYPE_LOCATION_SAMPLE, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_LOCATION_SAMPLE, FitnessOptions.ACCESS_WRITE)

            .addDataType(DataType.TYPE_LOCATION_TRACK, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_LOCATION_TRACK, FitnessOptions.ACCESS_WRITE)
             ...
            .build();

    GoogleSignInAccount account = GoogleSignIn.getAccountForExtension(this, fitnessOptions);

    if (!GoogleSignIn.hasPermissions(account, fitnessOptions)) {
        GoogleSignIn.requestPermissions(
                this, // your activity
                GOOGLE_FIT_PERMISSIONS_REQUEST_CODE, // e.g. 1
                account,
                fitnessOptions);
    }
}

推荐阅读