是否有办法在扑动应用程序目录外创建一个文件夹?



函数getExternalStorageDirectory()和ApplicationDocumentDirectory()给了我相同的目录,这是在android文件夹内。我喜欢在存储/仿真/0中创建一个文件夹,我尝试显式地创建它目录(存储/模拟/0)共创();然后它说你没有得到许可。我给了所有可能的权限,仍然得到相同的结果。有没有办法在存储/模拟/0中创建一个文件夹?

NB: _getPermission根据权限状态返回bool值。这段代码在模拟器中工作得很好,但在实际设备中不能工作。

takePhoto(BuildContext context) async {
if ( await _getPermission(Permission.manageExternalStorage)){

final image =await picker.pickImage(source: ImageSource.camera);
var newPath = "storage/emulated/0/takephotosaver";
var directory = Directory(newPath).create();
File fileIMage = File(image!.path);
var imageName = DateTime.now().toString();
fileIMage.copy("$newPath/$imageName.jpg");
Navigator.push(context, MaterialPageRoute(builder: (context)=>MyPreview(fileIMage)));
}

}}

编辑:-此代码在android版本9及以下工作,但不工作在android 10和11。有没有办法显示我的相机拍摄的图像在一个单独的文件夹?

android 10之后一切都变了。现在不应该在storage/emulated/0中创建文件夹。谷歌对此很严格,如果你在Google PlayStore发布应用,你的应用可能会被拒绝。如果您仍然想这样做,那么在您的AndroidManifest.xml中添加此权限。

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

为了获得用户的许可,执行

if (await Permission.manageExternalStorage.request().isGranted) {...}

编辑:

当你创建一个新文件时,设备不能自动找到它。你必须手动告诉设备刷新文件。之前你需要刷新设备中的所有文件才能更新这非常低效,但现在你只需要发送你想要更新的文件的路径。你可以使用media_scanner插件。

或者如果你想自己用kotlin做这段代码,

private fun broadcastFileUpdate(path: String){
context.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.fromFile(File(path))))
}