Я пытаюсь получить доступ к данным Step, используя плагин Flutter's Health, но я продолжаю сталкиваться с проблемой, в которой разрешения не предоставляются, даже если я объявил необходимые разрешения в моих AndroidManifest < /p>
Я реализовал следующую функцию для запроса разрешений и доступа к данным шага. Однако requestAuthorization () всегда возвращает false < /p>
Future _requestPermissions() async {
try {
// First check if Health Connect is available
bool isHealthConnectAvailable = await health.isHealthConnectAvailable();
print("Health Connect available: $isHealthConnectAvailable");
if (!isHealthConnectAvailable) {
print("Health Connect is not available on this device");
return false;
}
// Define all the data types we want to access
final types = [HealthDataType.STEPS];
// Set up corresponding permissions
final permissions =
types.map((type) => HealthDataAccess.READ_WRITE).toList();
print("Checking existing permissions for health data types: $types");
// I thought if i had declared it in manifest i would get it true here. But apparently not
// Check if we already have permissions
bool? hasAllPermissions = await health.hasPermissions(types);
print("Existing permissions status: $hasAllPermissions");
// If we already have all permissions, no need to request them again
if (hasAllPermissions == true) {
print("Already have all required permissions!");
return true;
}
// Request Activity Recognition permission
var activityStatus = await Permission.activityRecognition.status;
print("Activity Recognition initial status: ${activityStatus.name}");
if (!activityStatus.isGranted) {
final status = await Permission.activityRecognition.request();
await Permission.locationWhenInUse.request();
await Permission.sensors.request();
print("Activity Recognition request result: ${status.name}");
if (!status.isGranted) {
print("Activity Recognition permission denied: ${status.name}");
return false;
}
}
print("Requesting authorization for health data types: $types");
try {
// Check if types are supported before requesting authorization
for (HealthDataType type in types) {
bool supported = await health.isDataTypeAvailable(type);
print("Health data type $type supported: $supported");
if (!supported) {
print("Warning: $type is not supported on this device");
}
}
// Request Health Connect permissions with both read and write access
// always returns false
bool authorized = await health.requestAuthorization(
types,
permissions: permissions,
);
print("Health authorization result: $authorized");
if (!authorized) {
print("Health permissions not granted!");
return false;
}
// Verify if we can actually read the data types
for (HealthDataType type in types) {
bool isAvailable = await health.isDataTypeAvailable(type);
print("Health data type $type available: $isAvailable");
}
print("Health permissions granted successfully!");
return true;
} catch (healthErr) {
print("Error requesting Health API permissions: $healthErr");
return false;
}
} catch (e) {
print("General error in permission request: $e");
return false;
}
}
< /code>
Вот мой файл Android manifest.xml < /p>
< /code>
Вот функция проверки проверки: < /p>
Future requestAuthorization(
List types, {
List? permissions,
}) async {
await _checkIfHealthConnectAvailableOnAndroid();
if (permissions != null && permissions.length != types.length) {
throw ArgumentError(
'The length of [types] must be same as that of [permissions].');
}
if (permissions != null) {
for (int i = 0; i < types.length; i++) {
final type = types;
final permission = permissions;
if ((type == HealthDataType.ELECTROCARDIOGRAM ||
type == HealthDataType.HIGH_HEART_RATE_EVENT ||
type == HealthDataType.LOW_HEART_RATE_EVENT ||
type == HealthDataType.IRREGULAR_HEART_RATE_EVENT ||
type == HealthDataType.WALKING_HEART_RATE ||
type == HealthDataType.ATRIAL_FIBRILLATION_BURDEN) &&
permission != HealthDataAccess.READ) {
throw ArgumentError(
'Requesting WRITE permission on ELECTROCARDIOGRAM / HIGH_HEART_RATE_EVENT / LOW_HEART_RATE_EVENT / IRREGULAR_HEART_RATE_EVENT / WALKING_HEART_RATE / ATRIAL_FIBRILLATION_BURDEN is not allowed.');
}
}
}
final mTypes = List.from(types, growable: true);
final mPermissions = permissions == null
? List.filled(types.length, HealthDataAccess.READ.index,
growable: true)
: permissions.map((permission) => permission.index).toList();
// on Android, if BMI is requested, then also ask for weight and height
if (Platform.isAndroid) _handleBMI(mTypes, mPermissions);
List keys = mTypes.map((e) => e.name).toList();
final bool? isAuthorized = await _channel.invokeMethod(
'requestAuthorization', {'types': keys, "permissions": mPermissions});
return isAuthorized ?? false;
}
< /code>
Я гарантировал, что: < /p>
Health Connect устанавливается на устройстве. < /li>
Убедитесь, что AndroidManifest.xml содержит правильные разрешения. Health.haspermissions () Для проверки существующих разрешений. < /li>
Вручную предоставленные разрешения в настройках устройства, но все еще нет успеха. < /li>
< /ul>
Так что мои вопросы, если кто -то может помочь мне с этим вопросом: < /p>
Почему это будет: < /p>
Почему это будет: < /p>
почему ()
почему. /> У меня не хватает какой -либо дополнительной настройки, необходимой для разрешений на здоровье?>
Подробнее здесь: https://stackoverflow.com/questions/794 ... -step-data
Плагин Health Flutter: разрешение не предоставлено при чтении данных ⇐ Android
Форум для тех, кто программирует под Android
1741559458
Anonymous
Я пытаюсь получить доступ к данным Step, используя плагин Flutter's Health, но я продолжаю сталкиваться с проблемой, в которой разрешения не предоставляются, даже если я объявил необходимые разрешения в моих AndroidManifest < /p>
Я реализовал следующую функцию для запроса разрешений и доступа к данным шага. Однако requestAuthorization () всегда возвращает false < /p>
Future _requestPermissions() async {
try {
// First check if Health Connect is available
bool isHealthConnectAvailable = await health.isHealthConnectAvailable();
print("Health Connect available: $isHealthConnectAvailable");
if (!isHealthConnectAvailable) {
print("Health Connect is not available on this device");
return false;
}
// Define all the data types we want to access
final types = [HealthDataType.STEPS];
// Set up corresponding permissions
final permissions =
types.map((type) => HealthDataAccess.READ_WRITE).toList();
print("Checking existing permissions for health data types: $types");
// I thought if i had declared it in manifest i would get it true here. But apparently not
// Check if we already have permissions
bool? hasAllPermissions = await health.hasPermissions(types);
print("Existing permissions status: $hasAllPermissions");
// If we already have all permissions, no need to request them again
if (hasAllPermissions == true) {
print("Already have all required permissions!");
return true;
}
// Request Activity Recognition permission
var activityStatus = await Permission.activityRecognition.status;
print("Activity Recognition initial status: ${activityStatus.name}");
if (!activityStatus.isGranted) {
final status = await Permission.activityRecognition.request();
await Permission.locationWhenInUse.request();
await Permission.sensors.request();
print("Activity Recognition request result: ${status.name}");
if (!status.isGranted) {
print("Activity Recognition permission denied: ${status.name}");
return false;
}
}
print("Requesting authorization for health data types: $types");
try {
// Check if types are supported before requesting authorization
for (HealthDataType type in types) {
bool supported = await health.isDataTypeAvailable(type);
print("Health data type $type supported: $supported");
if (!supported) {
print("Warning: $type is not supported on this device");
}
}
// Request Health Connect permissions with both read and write access
// always returns false
bool authorized = await health.requestAuthorization(
types,
permissions: permissions,
);
print("Health authorization result: $authorized");
if (!authorized) {
print("Health permissions not granted!");
return false;
}
// Verify if we can actually read the data types
for (HealthDataType type in types) {
bool isAvailable = await health.isDataTypeAvailable(type);
print("Health data type $type available: $isAvailable");
}
print("Health permissions granted successfully!");
return true;
} catch (healthErr) {
print("Error requesting Health API permissions: $healthErr");
return false;
}
} catch (e) {
print("General error in permission request: $e");
return false;
}
}
< /code>
Вот мой файл Android manifest.xml < /p>
< /code>
Вот функция проверки проверки: < /p>
Future requestAuthorization(
List types, {
List? permissions,
}) async {
await _checkIfHealthConnectAvailableOnAndroid();
if (permissions != null && permissions.length != types.length) {
throw ArgumentError(
'The length of [types] must be same as that of [permissions].');
}
if (permissions != null) {
for (int i = 0; i < types.length; i++) {
final type = types[i];
final permission = permissions[i];
if ((type == HealthDataType.ELECTROCARDIOGRAM ||
type == HealthDataType.HIGH_HEART_RATE_EVENT ||
type == HealthDataType.LOW_HEART_RATE_EVENT ||
type == HealthDataType.IRREGULAR_HEART_RATE_EVENT ||
type == HealthDataType.WALKING_HEART_RATE ||
type == HealthDataType.ATRIAL_FIBRILLATION_BURDEN) &&
permission != HealthDataAccess.READ) {
throw ArgumentError(
'Requesting WRITE permission on ELECTROCARDIOGRAM / HIGH_HEART_RATE_EVENT / LOW_HEART_RATE_EVENT / IRREGULAR_HEART_RATE_EVENT / WALKING_HEART_RATE / ATRIAL_FIBRILLATION_BURDEN is not allowed.');
}
}
}
final mTypes = List.from(types, growable: true);
final mPermissions = permissions == null
? List.filled(types.length, HealthDataAccess.READ.index,
growable: true)
: permissions.map((permission) => permission.index).toList();
// on Android, if BMI is requested, then also ask for weight and height
if (Platform.isAndroid) _handleBMI(mTypes, mPermissions);
List keys = mTypes.map((e) => e.name).toList();
final bool? isAuthorized = await _channel.invokeMethod(
'requestAuthorization', {'types': keys, "permissions": mPermissions});
return isAuthorized ?? false;
}
< /code>
Я гарантировал, что: < /p>
Health Connect устанавливается на устройстве. < /li>
Убедитесь, что AndroidManifest.xml содержит правильные разрешения. Health.haspermissions () Для проверки существующих разрешений. < /li>
Вручную предоставленные разрешения в настройках устройства, но все еще нет успеха. < /li>
< /ul>
Так что мои вопросы, если кто -то может помочь мне с этим вопросом: < /p>
Почему это будет: < /p>
Почему это будет: < /p>
почему ()
почему. /> У меня не хватает какой -либо дополнительной настройки, необходимой для разрешений на здоровье?>
Подробнее здесь: [url]https://stackoverflow.com/questions/79496709/flutter-health-plugin-permission-not-granted-when-reading-step-data[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия