FlutterOS错误:权限被拒绝,错误号= 13

rbl8hiat  于 2023-02-16  发布在  Flutter
关注(0)|答案(1)|浏览(386)

我已经创建了一个应用程序,它可以从google drive下载一个加密文件,并将其存储在设备的downloads文件夹中,然后使用aes_crypt_null_safe软件包解密该文件,并将其存储为一个纯文本文件,下面是这两个函数。

从驱动器下载

Future<void> downloadFromDrive(String fName, String gdID) async {
var client = GoogleAuthClient(authHeaders);
var ga = drive.DriveApi(client);
drive.Media file = await ga.files
    .get(gdID, downloadOptions: drive.DownloadOptions.fullMedia) as Media;
print(file.stream);

final directory = await getExternalStorageDirectory();
print(directory?.path);
final saveFile =
    File('/storage/emulated/0/Download/test_gdrive_download.txt.aes');
List<int> dataStore = [];
file.stream.listen((data) {
  print("DataReceived: ${data.length}");
  dataStore.insertAll(dataStore.length, data);
}, onDone: () async {
  print("Task Done");
  await saveFile.writeAsBytes(dataStore);
  print("File saved at ${saveFile.path}");
}, onError: (error) {
  print("Some Error");
});
await Future.delayed(const Duration(seconds: 3), () {
});
}

要解密

decryptJsonFile({required String srcPath, required String destPath}) async {
crypt.decryptFileSync(srcPath, destPath);
}

调用两个函数

onPressed: () async {
                print("Downloading file from drive...");
                await downloadFromDrive("ideas", fileId.toString());
                print("Decrypting the file downloaded from drive...");
                await decryptJsonFile(
                    srcPath: '/storage/emulated/0/Download/test_gdrive_download.txt.aes',
                    destPath: '/storage/emulated/0/Download/decrypted_file.txt');
              },

当我尝试触发这些功能时,它会完美地下载文件并将其存储在下载文件夹中,但当我尝试解密时,我会得到以下错误,

[ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: FileSystemException: Failed to open /storage/emulated/0/Download/test_gdrive_download.txt.aes for writing., path = '/storage/emulated/0/Download/decrypted_file.txt' (OS Error: Permission denied, errno = 13)

我已在Android清单文件中提供了所有必需的权限

<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

以及

android:requestLegacyExternalStorage="true"
cvxl0en2

cvxl0en21#

添加此权限

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

相关问题