簡體   English   中英

使用 @ionic-native/file/ngx 從 Android 下載文件夾讀取文本文件時出現問題 - Android 11

[英]Issue when reading text file from Android Download folder with @ionic-native/file/ngx - Android 11

我有一個 Ionic 5 應用程序,我正在使用 @ionic-native/file/ngx 和 cordova-plugin-file 插件將文本文件讀入我在 Android 上的應用程序。

我的代碼如下所示:

const path = this.file.externalRootDirectory + 'Download';

this.file.readAsText(path, 'foo.txt').then((file) => {
   console.log('process file');   
}).catch((e) => {
  console.log('error '+ e); 
});

這適用於運行 Android 9 的幾部手機。運行 Android 10 的 Pixel 3 不起作用。 它也不適用於運行 Android 11 的 Pixel。promise 返回 null。

我嘗試過的事情:

使用 checkDir() 驗證目錄是否存在 使用 FileChooser 和 filePath.resolveNativePath 使用 androidPermissions READ_EXTERNAL_STORAGE 設置為 true

這是我的離子信息

離子:

   Ionic CLI                     : 6.12.2 (/Users/.nvm/versions/node/v12.18.3/lib/node_modules/@ionic/cli)
   Ionic Framework               : @ionic/angular 5.4.3
   @angular-devkit/build-angular : 0.1002.0
   @angular-devkit/schematics    : 10.1.7
   @angular/cli                  : 10.2.0
   @ionic/angular-toolkit        : 2.3.3

Cordova:

   Cordova CLI       : 10.0.0
   Cordova Platforms : android 9.0.0, ios 6.1.1
   Cordova Plugins   : cordova-plugin-ionic-keyboard 2.2.0, cordova-plugin-ionic-webview 5.0.0, (and 15 other plugins)

Utility:

   cordova-res (update available: 0.15.2) : 0.15.1
   native-run (update available: 1.2.2)   : 1.0.0

System:

   ios-sim : 8.0.2
   NodeJS  : v12.18.3 (/Users/.nvm/versions/node/v12.18.3/bin/node)
   npm     : 6.14.8
   OS      : macOS Catalina
   Xcode   : Xcode 12.2 Build version 12B45b

任何關於我能做些什么來解決這個問題的想法都將不勝感激。

Android 在 Android 10(API 級別 29)中實施了一項新的存儲策略,該策略在 Android 11(API 級別 30)中實施,稱為Scoped Storage 默認情況下,它會阻止應用訪問通用文件系統,在您的情況下是下載文件夾。

我建議重新構建系統的長期解決方案,以便不需要來自下載文件夾的信息,因為那里可能存在大多數應用程序不應有業務訪問的敏感信息。 但是,如果您確實需要訪問權限,則必須使用一個新權限: MANAGE_EXTERNAL_STORAGE

對於 Android 10,最近向 cordova-plugin-file 添加了一個標志,以確保操作系統使用舊的文件策略,因此如果您使用的是最新的插件版本,您的代碼應該可以正常工作 如果您需要直接從 repo 安裝它:

cordova plugin rm cordova-plugin-file --force

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

訂閱相關問題了解更多。

在我的例子中,我必須將<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />添加到我的 AndroidManifest.xml,然后我進入設置>隱私>權限管理器>文件和媒體並在那里搜索我的應用程序,然后當您單擊它時,您將看到“允許管理所有文件”選項。

你必須手動完成,我還沒有找到一種方法來自動化這個過程,但我希望你可以使用它作為解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM