gij*_*676 11 android dart flutter
我正在尝试从 Flutter 访问 Android 模拟器(SDK 33)上的存储。这是我正在测试它的代码:
void test() async {
PermissionStatus storageStatus = await Permission.storage.request();
if (storageStatus == PermissionStatus.granted) {
print("granted");
}
if (storageStatus == PermissionStatus.denied) {
print("denied");
}
if (storageStatus == PermissionStatus.permanentlyDenied) {
openAppSettings();
}
}
Run Code Online (Sandbox Code Playgroud)
我已在 AndroidManifest.xml 中包含“android.permission.WRITE_EXTERNAL_STORAGE”权限。
我尝试授予相机权限并且它有效,但它不适用于存储。
当我检查存储权限状态时,它被永久拒绝,并且当应用程序的设置打开时,它显示“没有请求权限”。
我尝试运行“flutter clean”,这在更新清单时似乎是必要的。
我尝试过从手机卸载并重新安装该应用程序
我如何解决它?
由于您使用的是Android 版本 13(或 SDK 33),因此无需请求存储权限,因为应用程序默认可以访问这些文件。
\n因此,除了检查存储权限外,还要使用device_info_plus库检查SDK版本是否早于33。
\nvoid test() async {\n final plugin = DeviceInfoPlugin();\n final android = await plugin.androidInfo;\n\n final storageStatus = android.version.sdkInt < 33\n ? await Permission.storage.request()\n : PermissionStatus.granted;\n\n if (storageStatus == PermissionStatus.granted) {\n print("granted");\n }\n if (storageStatus == PermissionStatus.denied) {\n print("denied");\n }\n if (storageStatus == PermissionStatus.permanentlyDenied) {\n openAppSettings();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n不要忘记导入device_info_plus:
\nimport \'package:device_info_plus/device_info_plus.dart\';\nRun Code Online (Sandbox Code Playgroud)\n进一步阅读:
\n小智 2
一旦尝试这样做。
添加到您的清单中
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
用于请求许可。
Future<bool> requestPermission(Permission permission) async {
if (await permission.isGranted) {
return true;
} else {
var result = await permission.request();
if (result == PermissionStatus.granted) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
为了检查权限,您还可以根据需要更改对话框文本
Future<bool> checkPermission() async {
///For Check permission..
if (Platform.isAndroid ? !await requestPermission(Permission.storage) && !await requestPermission(Permission.manageExternalStorage) : !await requestPermission(Permission.storage)) {
await Get.dialog(CupertinoAlertDialog(
title: const Text("Photos & Videos permission"),
content: const Text(" Photos & Videos permission should be granted to connect with device, would you like to go to app settings to give Bluetooth & Location permissions?"),
actions: <Widget>[
TextButton(
child: const Text('No thanks'),
onPressed: () {
Get.back();
}),
TextButton(
child: const Text('Ok'),
onPressed: () async {
Get.back();
await openAppSettings();
})
],
));
return false;
} else {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这些事情能解决您的问题。