微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Android 在 Cordova 的共享空间中保存文件? 适用于最高 Android 10 (API 29) 的解决方案

如何解决如何使用 Android 在 Cordova 的共享空间中保存文件? 适用于最高 Android 10 (API 29) 的解决方案

我正在使用带有 cordova-plugin-file 的 Apache Cordova 来开发一些 Android 应用程序。自 Android API 29 (Android 10) 起,apps no longer have access to shared 由于隐私问题直接占用空间。

我在 file:///storage/emulated/0/Download/ 上存储了一些 pdf 文件,然后用户可以从中打开 pdf 文件

window.resolveLocalFileSystemURL('file:///storage/emulated/0/Download/',function (dir) {
  dir.getFile(filename,{ create: true },function (file) {
    file.createWriter(function (fileWriter) {
      console.log('Writing content to file')

      fileWriter.onwriteend = function () {
        console.log('Successful file write...')
      }

      fileWriter.onerror = onerror

      fileWriter.write(DataBlob)
    },onerror)
  },onerror)
},onerror)

但这在 Android 10 上停止工作。

我现在如何存储可供用户访问的文件

解决方法

window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory + "/Download" 用来工作

  • 这在面向 API 28(现在被 Google Play 禁止)时应该可以正常工作
  • 当使用插件的开发版本(具有 android:requestLegacyExternalStorage="true")定位 API 29 时,这应该可以工作,或者您可以使用 edit-config 添加此标志。
  • 这在面向 API 30 时不起作用,因为 API 30 会忽略 android:requestLegacyExternalStorage 属性。

在以 API 30 为目标之前阅读 Android Notes 很重要。在使用新 API 以 API 30 为目标时,您可能需要将文件迁移到另一个文件夹以保持对它们的访问。 Source

适用于最高 Android 10 (API 29) 的解决方案

使用插件的开发版本

cordova plugin rm cordova-plugin-file
cordova plugin add https://github.com/apache/cordova-plugin-file.git

我对其进行了测试,它允许我在 Android 10 (API 29) 中使用 cordova.file.externalRootDirectory + "/Download"

到我撰写本文时,还没有针对 Android 11(API 级别 30)的解决方案

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。