【问题标题】:cordova.file.externalRootDirectory not working in Android 11 devicescordova.file.externalRootDirectory 在 Android 11 设备中不起作用
【发布时间】:2022-01-03 16:33:36
【问题描述】:

我无法在 android 11 版本的设备上下载文件。

**Details :**

cordova android 10.1.0        
"cordova-plugin-file" version="6.0.2"           
"cordova-plugin-file-transfer" version="1.7.1"           
"cordova-plugin-filepath" version="1.6.0"   

**My Code:**

下面的代码是我为下载文件设备而编写的,它在 android 9 和 10 中工作,当我以 SDK 30 为目标时,它不工作并且仅在 android 11 中失败。

window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, function(dir) {
    dir.getFile("test.pdf", {create:true}, function(file) {
        file.createWriter(function(fileWriter) {
        fileWriter.write("byteArrays data");
            alert('Message', 'File Downloaded Successfully');
        }, function(){
            alert('Error!', "Unable to save the file");
        });
    },function(e){
        alert('Error!', e);
    });
},function(e){
    console.log(e);
});

**I tried with below code in Androidmainfest file**

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



**Config.xml file**
<preference name="AndroidInsecureFileModeEnabled" value="true" />
<preference name="AndroidPersistentFileLocation" value="Compatibility" />

如果有任何遗漏,请告诉我,提前致谢。

【问题讨论】:

  • 是的。您没有告诉您尝试创建的文件的完整路径。并且“不工作”你没有给出问题描述。
  • @blackapps 获取 base64 数据并使用 new Blob 转换为 pdf 并保存到设备中。让我知道是否有任何解决方案。从前几天开始尝试 nthg 工作,但相同的代码在 android 9 和 10 中工作。
  • 重复:您没有告诉您尝试创建的文件的完整路径。
  • @blackapps 我的系统路径是 - /storage/emulated/0/

标签: android cordova


【解决方案1】:

在 Android 11+ 设备上,无法再在外部存储 (/storage/emulated/0) 的根目录中创建文件。

使用现有的公共目录,如 DCIM、图片、文档等。

【讨论】:

  • 能否分享一下代码,会更有帮助
  • 对不起,我不使用 Cordova。
【解决方案2】:

我发现插件Cordova Advanced HTTPdownloadFile 方法是下载文件的好方法。我创建了这个example app 来展示它是如何工作的。

请注意,MANAGE_EXTERNAL_STORAGE 权限在 Android 11 中具有 essentially been deprecated,因此您无法再下载到共享存储(例如,许多应用共享的 cordova.file.externalRootDirectory - 存在隐私和安全风险)。尝试使用您的应用范围内的目录之一,例如 cordova.file.externalDataDirectory

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2020-03-13
    • 2013-11-25
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多