Gab*_*ira 7 android typescript ionic-framework capacitor
readFile我尝试使用电容器文件系统的功能读取模拟器中的文件。我尝试操作它的文件位于模拟器的下载文件夹中,并且该函数返回以下错误:
\n\n错误:文件不存在
\n
我还尝试使用复制功能,将此文件复制到可以操作它的目录,但此函数返回此错误:
\n\n\n错误:源对象不存在
\n
我还在应用程序中进行了权限测试,我得到了granted.
我在网上搜索了这个错误,但没有成功。Directory我还使用了文件系统服务功能上的所有参数,但所有选项都返回相同的错误。使用相同的参数,可以访问 Android 10 中的文件系统。
所有测试均在运行 Android 11 (API30) 的 Pixel 4 模拟器中进行。
\n在 android.xml 的标签内application,我添加了android:requestLegacyExternalStorage="true", 和user-permissions:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />\n<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />\n<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />\nRun Code Online (Sandbox Code Playgroud)\n主页.ts
\n带副本
\n// file_dir_path = file:///storage/emulated/0/Download/\n// file_name = file.kml\n// path = \'MyApp/project\' + this.projectId + \'/temp\'\nreturn this.filesystem.copyFileToManegeDirectory(file_dir_path + file_name, path + \'/teste\').then(fileAs64 => {\n console.log(fileAs64).\n});\nRun Code Online (Sandbox Code Playgroud)\n与读
\n// file_dir_path = file:///storage/emulated/0/Download/\n// file_name = file.kml\nreturn readFile(file_dir_path + file_name).then(fileAs64 => {\n console.log(fileAs64);\n});\nRun Code Online (Sandbox Code Playgroud)\n文件系统服务
\n/** Copy Files */\n// fileToCopy = file:///storage/emulated/0/Download/file.kml\ncopyFileToManegeDirectory(fileToCopy: string, directoryToGo: string): Promise<any> {\n return Filesystem.checkPermissions().then(permission => {\n console.log(permission)\n return Filesystem.copy({\n from: fileToCopy,\n directory: Directory.ExternalStorage,\n to: directoryToGo,\n toDirectory: Directory.External\n }).then(result => {\n console.log(result);\n })\n });\n}\n\n/** Read a file and returns a string base 64 */\nreadFile(path: string): Promise<string> {\n return Filesystem.readFile({\n path: path\n }).then(result => {\n return result.data;\n });\n}\nRun Code Online (Sandbox Code Playgroud)\n我需要知道是否可以从 Android 11 上的 app\xe2\x80\x99s 范围文件夹中获取文件。我的应用程序需要导入可以存在于设备上任何位置的文件(用户选择从何处)。
\n离子信息
\n\n Ionic CLI : 6.15.1-testing.0 (C:\\Users\\Gabriel Vieira\\AppData\\Roaming\\npm\\node_modules\\@ionic\\cli)\n Ionic Framework : @ionic/angular 5.6.8\n @angular-devkit/build-angular : 12.0.2\n @angular-devkit/schematics : 12.0.2\n @angular/cli : 12.0.2\n @ionic/angular-toolkit : 4.0.0\n\nCapacitor:\n\n Capacitor CLI : 3.0.0\n @capacitor/android : 3.0.0\n @capacitor/core : 3.0.0\n @capacitor/ios : not installed\n\nUtility:\n\n cordova-res : 0.15.3\n native-run : 1.4.0\n\nSystem:\n\n NodeJS : v14.16.1 (C:\\Program Files (x86)\\nodejs\\node.exe)\n npm : 6.14.12\n OS : Windows 10\nRun Code Online (Sandbox Code Playgroud)\nnpx帽医生
\nLatest Dependencies:\n\n @capacitor/cli: 3.0.1\n @capacitor/core: 3.0.1\n @capacitor/android: 3.0.1\n @capacitor/ios: 3.0.1\n\nInstalled Dependencies:\n\n @capacitor/ios: not installed\n @capacitor/cli: 3.0.0\n @capacitor/android: 3.0.0\n @capacitor/core: 3.0.0\nRun Code Online (Sandbox Code Playgroud)\n编辑
\n尝试将目标SDK更改为28和29,但出现相同的错误。
\n文档说当我需要访问作用域存储之外的文件时添加标签MANAGE_EXTERNAL_STORAGE,但是这个参数已经包含在我的清单中,即使这样我也不允许读取作用域存储之外的任何内容。
checkPermissions()在使用和测试文件系统权限时requestPermissions(),两个函数都会返回 publicStorage: \'granted\'。
如果您将正确的目标放入其中,android/variables.gradle它应该可以正常工作,如果没有,您必须在 Capacitor GitHub 页面中提出问题。
ext {
compileSdkVersion = 29
targetSdkVersion = 29
...
}
Run Code Online (Sandbox Code Playgroud)
而且你不应该使用 MANAGE_EXTERNAL_STORAGE 除非你有充分的理由,否则在 Google Play 商店中部署它可能会很麻烦,请参阅Google 的支持页面以获取更多详细信息。在您的 AndroidManifest 中也保留参数android:requestLegacyExternalStorage="true",并添加用户权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5505 次 |
| 最近记录: |