问题描述
我正在尝试通过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设备it shows me this sign in screen上调用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'
不幸的是,这些似乎都没有解决问题。如果有人可以帮助我解决这个问题,我将非常感谢!
解决方法
您可以尝试flutter clean
并检查是否持续吗?
似乎FitKit类具有requestPermissions
方法。将其与FitKit.hasPermissions
一起使用,以确保授予了必要的权限。
事实证明,由于某些原因,我的软件包名称和应用程序ID不同,因此在获取OAuth 2.0客户端ID时输入应用程序ID而不是软件包名称即可解决该问题。