Android 将目标 api 设置为 29 时未创建设备目录

Android device directory not creating when i set target api as 29

我在 cordova 中有一个移动应用程序,因为我创建了目录,如果我使用 Target Api 28,它将同时创建文件夹,如果将 Target Api 设置为 29,目录从不创建,我正在使用以下代码在内部存储中创建目录。

 if (device.platform.toLowerCase() == "android") {
            window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, onFileSystemSuccess, onError);
        } else {
            window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, onError);
        }
        
        function onFileSystemSuccess(fileSystem) {
        var entry = "";
        if (device.platform.toLowerCase() == "android") {
            entry = fileSystem;
        } else {
            entry = fileSystem.root;
        }
        entry.getDirectory("smfolder", {
            create: true,
            exclusive: false
        }, onGetDirectorySuccess, onGetDirectoryFail);
    };



    function onError(e) {
        alert("Fail to get folder");
    };

这是 config.xml 屏幕截图:http://prntscr.com/w53qgh 当我在Play Store上传时,它会要求将Target Api级别设置为29,然后只能上传,所以我需要将API设置为29,是否需要在配置中添加或android 清单文件?或者需要添加权限才能使用 API 29.

感谢您的帮助,因为我已经被困在这几天了。

此致,

亚拉文

虽然我不是 Cordova 专家,但问题似乎是因为 Scoped Storage 作为 API 29 (Android 10)

的一部分引入

它对您的应用程序如何 read/write 添加了一些限制到文件系统。但是,作为一种变通方法,您可以选择退出分区存储,就像 API 28.

一样工作

只需在清单文件的应用程序标记中添加 android:requestLegacyExternalStorage="true" 即可选择退出分区存储。它应该可以解决您的问题。

确保您的 compileSdkVersion 设置为 29 以使用此属性。

请注意,如果您的目标是 API 30 (Android 11),系统将忽略此标志,您必须让您的应用与分区存储兼容。

更多信息:https://developer.android.com/about/versions/11/privacy/storage