Я подключаю свое приложение к Google Fit, используя API Fit для получения данных о состоянии здоровья, таких как шаги, калории, частота сердечных сокращений, местоположение и т. Д. Для этого мне необходимо получить необходимые разрешения. Как только приложение откроется, пользователь введет свои учетные данные, а затем приложение запросит разрешения для конкретной учетной записи Google.
Я уже реализовал код для получения разрешений. И это работает нормально. Когда приложение запускается, пользователя просят дать разрешения, и всплывающее окно содержит список учетных записей Google, в зависимости от того, вошли ли на устройстве. Пользователь выбирает одну учетную запись Google, а затем разрешает / запрещает разрешения.
AndroidManifest.xml
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>
Создание FitnessOptions для передачи разрешений:
private FitnessOptions getFitnessSignInOptions(){
// request access to various data from fit history.
return FitnessOptions.builder()
.addDataType(DataType.TYPE_STEP_COUNT_CUMULATIVE)
.addDataType(DataType.TYPE_STEP_COUNT_DELTA)
.addDataType(DataType.TYPE_CALORIES_EXPENDED)
.addDataType(DataType.TYPE_MOVE_MINUTES)
.addDataType(DataType.TYPE_ACTIVITY_SEGMENT)
.addDataType(DataType.TYPE_LOCATION_SAMPLE)
.addDataType(DataType.AGGREGATE_HEART_RATE_SUMMARY)
.addDataType(DataType.TYPE_ACTIVITY_SEGMENT)
.build();
}
ИспользованиеFitnessOptions для получения запроса на разрешения:
private void requestFitnessPermission () {
FitnessOptions fitnessOptions = getFitnessSignInOptions(); if(!GoogleSignIn.hasPermissions(GoogleSignIn.getLastSignedInAccount(this), fitnessOptions)){
GoogleSignIn.requestPermissions(
this,
REQUEST_OAUTH_REQUEST_CODE,
GoogleSignIn.getLastSignedInAccount(this),
getFitnessSignInOptions());
//Log.i(TAG,GoogleSignIn.getLastSignedInAccount(this).toString());
} else if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_LOCATION_REQUEST_CODE);
}
}
Результат запроса разрешения на данный момент: всплывающее окно разрешения запрашивает выбор учетной записи Google среди многих учетных записей.
Ожидаемый результат. Во всплывающем окне должна отображаться только одна учетная запись Google и запрашиваться разрешение.