web-dev-qa-db-ja.com

Flutter:外部ストレージパス上のディレクトリを作成します - パスプロバイダgetExternalStorageDirectory()

私は、画像をダウンロードして外部ストレージにダウンロードして保存したいというFlutterアプリを作成しています。私はディレクトリを作成するために次のコードを使っています

var dir = await getExternalStorageDirectory();
  if(!Directory("${dir.path}/myapp").existsSync()){
    Directory("${dir.path}/myapp").createSync(recursive: true);
  }
 _

それは私に次のエラーを与えます:

FileSystemException: Creation failed, path = '/storage/emulated/0/myapp' (OS Error: Permission denied, errno = 13)
 _

マニフェストファイルにアクセス許可を設定し、ランタイムアクセス許可のために次のコードを使用しています。

List<Permissions> permissions = await Permission.getPermissionStatus([PermissionName.Storage]);
permissions.forEach((p) async {
  if(p.permissionStatus != PermissionStatus.allow){
    final res = await Permission.requestSinglePermission(PermissionName.Storage);
    print(res);
  }
});
 _

私は、Appが許可を得ているような設定で確認しました。

5
Gaurav Pingale

GetExternalStorageDirectoryを使用してファイルを保存する前にアクセス許可を要求する必要があります。

これをandroidmanifest.xmlに追加します。

 <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>
 _

その後、permission_handlerパッケージを使用してストレージ権限を取得します。

https://pub.dev/packages/permission_handler

エミュレータで実行されている場合、GetExternalStorageDirectoryが返されます。

/storage/emulated/0/Android/data/com.example.myapp/files/
 _

その下にディレクトリを作成するために外部DIRが必要な場合は、次のようにします。

/storage/emulated/0/
 _

このフォルダの下にディレクトリを作成することができるので、ユーザーはファイルを開くことができます。

0
live-love