我正在开发一个需要存储权限的 Flutter 应用程序。我正在使用 Permission_handler 包来请求这些权限。但是,当我尝试请求存储权限时,应用程序会将我定向到显示“无需权限”的设置页面,即使我已在 AndroidManifest.xml 文件中声明了权限。
代码:这是我的主要 Dart 代码:
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
body: Center(
child: ElevatedButton(
onPressed: () async {
PermissionStatus storagePermission =
await Permission.storage.request();
if (storagePermission == PermissionStatus.granted) {
print("granted");
}
if (storagePermission == PermissionStatus.denied) {
print("permission denied");
}
if (storagePermission == PermissionStatus.permanentlyDenied) {
openAppSettings();
}
},
child: Text('Ask Permission'),
),
),
);
}
}
这是我在 AndroidManifest.xml 中声明的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我尝试过的:
我已确保正确导入了permission_handler包。 我已经多次运行 flutter clean 和 flutter pub get 。 我遵循了几个 YouTube 教程,但没有一个能解决问题。 我什至从头开始创建了一个新项目,看看问题是否仍然存在。 预期行为:我希望当我单击“请求权限”按钮时,应用程序应该请求存储权限。
实际行为:应用程序没有请求权限,而是将我重定向到显示“无需权限”的设置页面
当存储权限被永久拒绝时,应用程序会将用户引导至设置页面:
if (storagePermission == PermissionStatus.permanentlyDenied) {
openAppSettings();
}
如果用户多次拒绝权限,权限状态将变为“永久拒绝”。此时,用户必须从应用程序的设置页面手动启用该权限。
If you remove the openAppSettings() line, the app won't be able to navigate to the settings page when the permission is denied.
请注意,如果用户多次取消权限请求,将不再显示权限对话框。但是,重新安装应用程序将重置权限状态,从而允许再次出现该对话框。