flutter-plugins
flutter-plugins copied to clipboard
[Health 10.2.0] Health().requestAuthorization(...) always returning false for Android / Health Connect
Remember to specify the plugin name in the title!
Device / Emulator and OS
Please complete the following information for each phone and/or emulator you're experiencing this bug on:
- Device: [Android Emulator / Xiaomi MI 11 Lite 5G]
- OS: [Android 14]
NB: Bugs pertaining to old devices/OS versions will likely not be fixed.
- For iOS only the latest OS is supported.
- For Android, see the OS versions for which Google support security fixes**
Describe the bug
After doing the setup as indicated in readme at https://pub.dev/packages/health, I have added a new view to my App including the code from the demo. It seems to run just fine, however, when I try to "Authenticate" I am getting: "Access Denied (to Health Connect)!"
if (!hasPermissions) {
// requesting access to the data types before reading them
try {
authorized = await Health().requestAuthorization(types, permissions: permissions);
} catch (error) {
debugPrint("Exception in authorize: $error");
}
}
The "Health().requestAuthorization" call is always coming back false. I've tried with many types at once or just a single one and with READ or READ/WRITE permissions. The result is always the same: false.
The demo error pre-configured messages suggest I should check the permissions and services added to my manifest file, which I have done many times, but cant' see anything wrong.
To Reproduce
Add plugin to project, add demo scene to a new view, try to Authenticate.
Expected behavior
Should return "true".
Actual behavior
Returns "false".
This is my manifest. I added every single permission just in case.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.testApp">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />
<!-- For health -->
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_ACTIVE_CALORIES_BURNED" />
<uses-permission android:name="android.permission.WRITE_ACTIVE_CALORIES_BURNED" />
<uses-permission android:name="android.permission.READ_BASAL_BODY_TEMPERATURE" />
<uses-permission android:name="android.permission.WRITE_BASAL_BODY_TEMPERATURE" />
<uses-permission android:name="android.permission.READ_BASAL_METABOLIC_RATE" />
<uses-permission android:name="android.permission.WRITE_BASAL_METABOLIC_RATE" />
<uses-permission android:name="android.permission.READ_BLOOD_GLUCOSE" />
<uses-permission android:name="android.permission.WRITE_BLOOD_GLUCOSE" />
<uses-permission android:name="android.permission.READ_BLOOD_PRESSURE" />
<uses-permission android:name="android.permission.WRITE_BLOOD_PRESSURE" />
<uses-permission android:name="android.permission.READ_BODY_FAT" />
<uses-permission android:name="android.permission.WRITE_BODY_FAT" />
<uses-permission android:name="android.permission.READ_BODY_TEMPERATURE" />
<uses-permission android:name="android.permission.WRITE_BODY_TEMPERATURE" />
<uses-permission android:name="android.permission.READ_BODY_WATER_MASS" />
<uses-permission android:name="android.permission.WRITE_BODY_WATER_MASS" />
<uses-permission android:name="android.permission.READ_BONE_MASS" />
<uses-permission android:name="android.permission.WRITE_BONE_MASS" />
<uses-permission android:name="android.permission.READ_CERVICAL_MUCUS" />
<uses-permission android:name="android.permission.WRITE_CERVICAL_MUCUS" />
<uses-permission android:name="android.permission.READ_EXERCISE" />
<uses-permission android:name="android.permission.WRITE_EXERCISE" />
<uses-permission android:name="android.permission.READ_DISTANCE" />
<uses-permission android:name="android.permission.WRITE_DISTANCE" />
<uses-permission android:name="android.permission.READ_ELEVATION_GAINED" />
<uses-permission android:name="android.permission.WRITE_ELEVATION_GAINED" />
<uses-permission android:name="android.permission.READ_FLOORS_CLIMBED" />
<uses-permission android:name="android.permission.WRITE_FLOORS_CLIMBED" />
<uses-permission android:name="android.permission.READ_HEART_RATE" />
<uses-permission android:name="android.permission.WRITE_HEART_RATE" />
<uses-permission android:name="android.permission.READ_HEART_RATE_VARIABILITY" />
<uses-permission android:name="android.permission.WRITE_HEART_RATE_VARIABILITY" />
<uses-permission android:name="android.permission.READ_HEIGHT" />
<uses-permission android:name="android.permission.WRITE_HEIGHT" />
<uses-permission android:name="android.permission.READ_HYDRATION" />
<uses-permission android:name="android.permission.WRITE_HYDRATION" />
<uses-permission android:name="android.permission.READ_INTERMENSTRUAL_BLEEDING" />
<uses-permission android:name="android.permission.WRITE_INTERMENSTRUAL_BLEEDING" />
<uses-permission android:name="android.permission.READ_LEAN_BODY_MASS" />
<uses-permission android:name="android.permission.WRITE_LEAN_BODY_MASS" />
<uses-permission android:name="android.permission.READ_MENSTRUATION" />
<uses-permission android:name="android.permission.WRITE_MENSTRUATION" />
<uses-permission android:name="android.permission.READ_NUTRITION" />
<uses-permission android:name="android.permission.WRITE_NUTRITION" />
<uses-permission android:name="android.permission.READ_OVULATION_TEST" />
<uses-permission android:name="android.permission.WRITE_OVULATION_TEST" />
<uses-permission android:name="android.permission.READ_OXYGEN_SATURATION" />
<uses-permission android:name="android.permission.WRITE_OXYGEN_SATURATION" />
<uses-permission android:name="android.permission.READ_POWER" />
<uses-permission android:name="android.permission.WRITE_POWER" />
<uses-permission android:name="android.permission.READ_RESPIRATORY_RATE" />
<uses-permission android:name="android.permission.WRITE_RESPIRATORY_RATE" />
<uses-permission android:name="android.permission.READ_RESTING_HEART_RATE" />
<uses-permission android:name="android.permission.WRITE_RESTING_HEART_RATE" />
<uses-permission android:name="android.permission.READ_SEXUAL_ACTIVITY" />
<uses-permission android:name="android.permission.WRITE_SEXUAL_ACTIVITY" />
<uses-permission android:name="android.permission.READ_SLEEP" />
<uses-permission android:name="android.permission.WRITE_SLEEP" />
<uses-permission android:name="android.permission.READ_SPEED" />
<uses-permission android:name="android.permission.WRITE_SPEED" />
<uses-permission android:name="android.permission.READ_STEPS" />
<uses-permission android:name="android.permission.WRITE_STEPS" />
<uses-permission android:name="android.permission.READ_TOTAL_CALORIES_BURNED" />
<uses-permission android:name="android.permission.WRITE_TOTAL_CALORIES_BURNED" />
<uses-permission android:name="android.permission.READ_VO2_MAX" />
<uses-permission android:name="android.permission.WRITE_VO2_MAX" />
<uses-permission android:name="android.permission.READ_WEIGHT" />
<uses-permission android:name="android.permission.WRITE_WEIGHT" />
<uses-permission android:name="android.permission.READ_WHEELCHAIR_PUSHES" />
<uses-permission android:name="android.permission.WRITE_WHEELCHAIR_PUSHES" />
<!-- Check if Health Connect is installed -->
<queries>
<package android:name="com.google.android.apps.healthdata" />
<intent>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent>
<intent>
<action android:name="android.intent.action.SENDTO" />
<data android:scheme="smsto" />
</intent>
</queries>
<application
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
android:label="Test"
tools:replace="android:label">
<!-- flutter_background_geolocation licence -->
<meta-data
android:name="com.transistorsoft.locationmanager.license"
android:value="..." />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="..." />
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@mipmap/ic_stat_ic_notification" />
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:exported="true"
android:hardwareAccelerated="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/LaunchTheme"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent-filter>
<!-- Intention to show Permissions screen for Health Connect API -->
<!--<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent-filter>-->
</activity>
<activity
android:name="com.aboutyou.dart_packages.sign_in_with_apple.SignInWithAppleCallback"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="signinwithapple" />
<data android:path="callback" />
</intent-filter>
</activity>
<activity-alias
android:name="ViewPermissionUsageActivity"
android:exported="true"
android:permission="android.permission.START_VIEW_PERMISSION_USAGE"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
<category android:name="android.intent.category.HEALTH_PERMISSIONS" />
</intent-filter>
</activity-alias>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>
Screenshots
This is the result of pressing the "Authenticate" button:
Flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[!] Flutter (Channel stable, 3.19.2, on Microsoft Windows [Versi¢n 10.0.19045.4412], locale es-ES)
! The flutter binary is not on your path. Consider adding C:\Users\myuser\fvm\versions\3.19.2\bin to your path.
! Warning: dart
on your path resolves to C:\tools\dart-sdk\bin\dart.exe, which is not inside your current Flutter SDK checkout at C:\Users\louen\fvm\versions\3.19.2. Consider adding C:\Users\myuser\fvm\versions\3.19.2\bin to th
e front of your path.
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[√] Chrome - develop for the web
[√] Android Studio (version 2021.3)
[√] Connected device (4 available)
[√] Network resources
Additional information
Add any other info about the problem here.