Flutter:使用Flutter在手机存储中创建应用程序特定文件夹

6jjcrrmo  于 2022-12-30  发布在  Flutter
关注(0)|答案(1)|浏览(317)

我需要在存储中创建一个应用程序特定文件夹,但错误返回“访问被拒绝”。当我搜索它时,我发现没有办法直接从Android 11在存储中创建应用程序特定文件夹。

Future initRecorder() async {
      var directory = await getExternalStorageDirectory();
      var toStringConvertedPath=(directory?.path).toString();

      print(toStringConvertedPath);
      Directory(toStringConvertedPath).create();

}
当前节省时间:/storage/emulated/0/安卓/数据/网站示例调查应用程序/文件
需要保存:/storage/调查应用程序/文件
有没有办法,我们可以创建一个文件夹或有任何替代方法,使文件夹容易访问的用户在Flutter。

h22fl7wq

h22fl7wq1#

解决了

我所做的是,在创建目录之前,我已经请求了存储、accessMediaLocation、manageExternalStorage的权限。

Future<bool> requestPermission() async {

bool storagePermission = await Permission.storage.isGranted;
bool mediaPermission = await Permission.accessMediaLocation.isGranted;
bool manageExternal = await Permission.manageExternalStorage.isGranted;

if (!storagePermission) {
  storagePermission = await Permission.storage.request().isGranted;
}

if (!mediaPermission) {
  mediaPermission =
      await Permission.accessMediaLocation.request().isGranted;
}

if (!manageExternal) {
  manageExternal =
      await Permission.manageExternalStorage.request().isGranted;
}

bool isPermissionGranted =
    storagePermission && mediaPermission && manageExternal;

if (isPermissionGranted) {
  return true;
} else {
  return false;
}}

并在androidManifest.xml中添加以下行。

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

现在我们来创建一个存储目录,即storage/app_name。

Future initRecorder() async {
bool permission = await requestPermission();
if (Platform.isAndroid) {
  if (permission) {
    var directory = await getExternalStorageDirectory();
    String newPath = "";
    print(directory);
    String convertedDirectoryPath = (directory?.path).toString();
    List<String> paths = convertedDirectoryPath.split("/");
    for (int x = 1; x < convertedDirectoryPath.length; x++) {
      String folder = paths[x];
      if (folder != "Android") {
        newPath += "/" + folder;
      } else {
        break;
      }
    }
    newPath = newPath + "/surveyApp/Audio";
    print(newPath);
    directory = Directory(newPath);
    if (!await directory.exists()) {
      await directory.create(recursive: true);
    }
 
  } else {
    print("permssion denied");
    Navigator.of(context).pop();
    Fluttertoast.showToast(msg: "Please give neccesary permissions");
    return false;
  }
}}

现在我们可以在存储层创建应用程序特定目录。

相关问题