2

我正在尝试使用我的 Flutter 应用程序实现以下软件包:

https://pub.dev/packages/permission_handler

https://pub.dev/packages/fit_kit

我通过编写以下两个函数来做到这一点:

Future<void> checkPermissions() async {
 var status = await Permission.activityRecognition.status;
 if (status.isUndetermined || status.isDenied) {
   Permission.activityRecognition.request();
}  else if (status.isPermanentlyDenied) {
   openAppSettings();
 }
}

Future<void> read() async {
 results.clear();
 await checkPermissions();
 for (DataType type in [DataType.STEP_COUNT, DataType.DISTANCE]) {
   try {
     results[type] = await FitKit.read(
       type,
       dateFrom: _weekBeginning,
       dateTo: _now,
     );
   } on UnsupportedException catch (e) {
     results[e.dataType] = [];
   }
 }
 dailyStepBuffer = 0;
 dailyDistanceBuffer = 0;
 for(FitData dataPoint in results[DataType.STEP_COUNT]){
   print(dataPoint);
   dailyStepBuffer += dataPoint.value.round();
 }
 for(FitData dataPoint in results[DataType.DISTANCE]){
   print(dataPoint);
   dailyDistanceBuffer += dataPoint.value.round();
 }
 setState(() {
   dailySteps = dailyStepBuffer;
   dailyDistance = dailyDistanceBuffer;
 });
}

函数和包在 iOS 上按预期工作,但由于某种原因,每当我在 Android 设备上调用 read() 时,它都会显示这个登录屏幕,当我点击我的帐户时,它什么也不做,我收到错误:

E/flutter ( 8211): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: PlatformException(FitKit, User denied permission access, null)

我已经使用我的 SHA-1 指纹获得了 OAuth 2.0 客户端 ID,添加<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>到我的 AndroidManifest.xml 文件中,并将以下内容添加到我的 build.gradle 中:

implementation 'com.google.android.gms:play-services-fitness:19.0.0'
implementation 'com.google.android.gms:play-services-auth:18.1.0'

不幸的是,这些似乎都没有解决这个问题。如果有人能帮我解决这个问题,我将不胜感激,谢谢!

4

3 回答 3

1

您可以尝试flutter clean检查这是否持续存在吗?

于 2020-09-17T19:46:56.877 回答
1

FitKit 类似乎有一个requestPermissions方法。使用它FitKit.hasPermissions来确保授予必要的权限。

于 2020-09-17T20:07:02.270 回答
1

事实证明,由于某种原因,我的包名称和应用程序 ID 不同,因此在获取我的 OAuth 2.0 客户端 ID 时输入应用程序 ID 而不是包名称解决了它。

于 2020-09-17T22:41:53.300 回答