fileSystem.getDirectory 不适用于迁移到 android 13 的 cordova 移动应用程序 - Android API 级别

问题描述 投票:0回答:0

我的目标是我的 Android 应用程序适用于 Android 13 (API 33)。我在仅在运行 android 13 的手机上下载文件时遇到问题;我收到一个错误代码 2,通常是 SECURITY_ERR:fileSystem.getDirectory('Download', {create: true,exclusive:false}

我的代码如下:

.getByUrlCode(CONST.URL_LINK_URL_CODE_WEB_MOBILE).then(function (mobileSettingsLink) {
                           $http({
                                          method: "GET",
                                          url: mobileSettingsLink.mobileSettingsLink + data.urlpdf,
                                          responseType: "blob"                                   
                           }).then(function (response) {
                   var mimetype = response.headers("Content-Type");
                   console.log("response.data==="+response.data);
                   var file = new Blob([response.data], {type: mimetype});
                   var fileURL = URL.createObjectURL(file);
                   
                   var fileName = response.headers("Content-Disposition").split(';')[1].split('=')[1];if(mimetype.includes("text/comma-separated-values")){
                      mimetype = "text/csv";
                    }else if(mimetype.includes("text/semicolon-separated-values")){
                       mimetype = "text/csv";
                   }else if(mimetype.includes("ascii")){
                       mimetype = "text/plain";
                    }else if(mimetype.includes("text/qif")){
                       mimetype = "application/qif";
                    }else if(mimetype.includes("text/ofx")){
                       mimetype = "application/x-ofx";
                    }

                      var storageLocation = "";
                      if (ionic.Platform.isAndroid()) {
                          storageLocation = "file:///storage/emulated/0/";
                          console.log("storageLocation=="+storageLocation);
                      }
                      else {
                          storageLocation = cordova.file.documentsDirectory;
                      }

                      window.resolveLocalFileSystemURL(storageLocation,
                           function (fileSystem) {

                               fileSystem.getDirectory('Download', {
                                       create: true,
                                       exclusive: false
                                   },
                                   function (directory) {
                                       directory.getFile(fileName, {
                                               create: true,
                                               exclusive: false
                                           },
                                           function (fileEntry) {
                                               fileEntry.createWriter(function (writer) {
                                                   writer.onwriteend = function () {
                                                       console.log("File written to downloads");
                                                   };
                                                   writer.seek(0);
                                                   writer.write(file); 
                                                   var url = fileEntry.toURL();
                                                                          cordova.plugins.fileOpener2.open(url, mimetype, {
                                                                            error: function error(err) {
                                                                              console.error(err);
                                                                              alert("Impossible d'ouvrir le fichier, assurez-vous d\'avoir une application qui peut ouvrir ce type de fichier.");
                                                                            },
                                                                            success: function success() {
                                                                              console.log("success with opening the file");
                                                                            }
                                                                          });
                                               }, function(e) {
                                                console.log("Error: " + e);
console.error("Error1: ", e);
                                              });
                                           }, function(e) {console.log("Error: " + e);
                                           console.error("Error2: ", e);
                                         });
                                   }, function(e) {console.log("Error: " + e);
console.error("Error3: ", e);
                                 });
                           }, function(e) {console.log("Error: " + e);
console.error("Error4: ", e);
                         });
                       });
                   });           
                   });           
   }
                };
})

}());

在这个 android 行为变化的链接中,他们谈论的是媒体文件,而不是 pdf、txt、csv 文件……:

https://developer.android.com/about/versions/13/behavior-changes-13#granular-media-permissions

有人知道如何使用 Android 13 处理创建和读取目录和文件吗?

cordova android-permissions android-api-levels cordova-plugin-file android-13
© www.soinside.com 2019 - 2024. All rights reserved.