Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Cordova文件插件:安全错误_Android_Cordova_Cordova Plugin File - Fatal编程技术网

Android Cordova文件插件:安全错误

Android Cordova文件插件:安全错误,android,cordova,cordova-plugin-file,Android,Cordova,Cordova Plugin File,我有一个使用Cordova插件的混合应用程序(iOS/Android)。我有一个Android用户在使用文件插件时出现了安全错误。这似乎是在调用writeFile()时发生的。我为Android编写的文件路径是externalRootDirectory 有人能帮我理解为什么300-400个用户中有一个会有这个问题吗?如果有帮助的话,用户使用的是安卓6.0.1 下面是一些代码。我收到的错误是[创建文件时出错]–错误消息:[SECURITY\u ERR],因此在这种情况下会命中.writeFile(

我有一个使用Cordova插件的混合应用程序(iOS/Android)。我有一个Android用户在使用文件插件时出现了安全错误。这似乎是在调用
writeFile()
时发生的。我为Android编写的文件路径是
externalRootDirectory

有人能帮我理解为什么300-400个用户中有一个会有这个问题吗?如果有帮助的话,用户使用的是安卓6.0.1

下面是一些代码。我收到的错误是
[创建文件时出错]–错误消息:[SECURITY\u ERR]
,因此在这种情况下会命中
.writeFile()
捕获

  //Handle Native download
  if (this.appConfig.isNative) {
    this.loggingService.debug("Starting to create native file");
    //Get base file path for android/ios
    let filePath = (this.appConfig.isNativeAndroid) ? this.file.externalRootDirectory : this.file.cacheDirectory;

    //Write the file
    this.file.writeFile(filePath, fileName, data, { replace: true })
          .then((fileEntry: FileEntry) => {
              this.loggingService.debug("Created file: " + fileEntry.toURL());          
              //Open with File Opener plugin
              this.fileOpener.open(fileEntry.toURL(), data.type)
                .then(() => this.loggingService.debug('File is opened'))
                .catch(e => this.loggingService.error('Error openening file', e));
            })
          .catch((err) => {
             this.loggingService.error("Error creating file", err);
             throw err;  //Rethrow - will be caught by caller
          });
      }

我能想出这个。Android 6.0之后,在使用应用程序期间(不仅仅是在安装时)必须请求某些权限。这一点在《安卓怪癖》一书中也有所提及

棉花糖要求应用程序在读取/写入外部位置时请求权限。默认情况下,您的应用程序具有写入cordova.file.applicationStorageDirectory和cordova.file.externalApplicationStorageDirectory的权限,并且插件不会请求对这两个目录的权限,除非未装入外部存储。但是,由于限制,当未装入外部存储器时,它将请求获得写入cordova.file.externalApplicationStorageDirectory的权限

因此,在Android 6.0+上,将文件写入磁盘时,Cordova文件插件将显示类似以下内容的提示:

是否允许APP_NAME访问设备上的照片、媒体和文件


如果用户选择拒绝此请求,则Cordova文件写入将获得此
安全性\u ERR
,即使应用程序在安装时请求此权限。

您在config.xml中定义了吗?应将权限(android.Permission.WRITE_EXTERNAL_STORAGE)插入到AndroidManifest.xml中,并确保此目录确实存在,如果不创建它,请像Thank@Blauharley一样。我还没有定义任何AndroidExtraFilesystems首选项。在我做的任何其他测试中,我似乎都不需要这个。我们有几百人使用它,没有问题。AndroidManifest.xml中有一个
android.permission.WRITE_EXTERNAL_STORAGE
权限。不确定是否默认添加了文件插件?我也没有创建目录,只是在
externalRootDirectory
的根目录中创建了一个临时文件。在这种情况下还需要创建目录吗?在这种情况下,不需要创建目录,因为您已经在您想要的地方了。难道你没有收到一条特定的错误消息,其中包含一个错误的回调?请在这个问题中插入一些代码。Can do@Blauharley-我添加了一些代码细节。我们现在有另外一份报告,来自安卓7.0上的某人。所以我们在800多名用户中有2-3人看到了这一点。有什么想法吗?您是否最终将文件写入了cordova.file.externalRootDirectory或cordova.file.applicationStorageDirectory/cordova.file.externalapplicationstoragedirectorcordova.file?我目前正在写入Android的file.externalDataDirectory和iOS的file.dataDirectory。到目前为止,似乎在一些测试设备上工作。我看到在写入cordova.file.externalRootDirectory时出现了一个错误,权限被拒绝,它工作了多年,最近的插件升级做了一些更改,这个错误开始发生。有什么想法吗?我知道有一个插件可以帮助请求android权限(
cordova插件android权限
)。到目前为止,我还没有必要在有限的测试中使用它。文件插件似乎代表我请求权限(对于我正在使用的目录)。是否有可能有人在被询问时拒绝了权限,从而导致您的权限被拒绝?我不得不要求人们调整设置,或者在出现提示时拒绝权限时卸载/重新安装。是的,我也在使用iOS,像您一样使用
file.dataDirectory
。到目前为止,我没有任何问题。