我试图使用函数电容文件系统在模拟器中读取一个文件。我试图操作的文件位于模拟器的下载文件夹中,函数返回以下错误:
错误:文件不存在
我还尝试使用复制函数,将该文件复制到我可以操作它的目录中,但是这个函数返回这个错误:
错误:源对象不存在
此外,我还对应用程序中的权限进行了测试,我在应用程序中获得了granted。
我在网上搜索了这个错误,但没有成功。此外,我还在文件系统服务的函数上使用了Directory的所有参数,但是所有选项都会返回相同的错误。在相同的参数下,可以访问android 10中的文件系统。
所有的测试都是在仿真器Pixel 4和Android11 (API30)中进行的。
在android.xml中,在标记application中,我添加了android:requestLegacyExternalStorage="true",在user-permissions中添加了
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />homePage.ts
带复本
// file_dir_path = file:///storage/emulated/0/Download/
// file_name = file.kml
// path = 'MyApp/project' + this.projectId + '/temp'
return this.filesystem.copyFileToManegeDirectory(file_dir_path + file_name, path + '/teste').then(fileAs64 => {
console.log(fileAs64).
});带读
// file_dir_path = file:///storage/emulated/0/Download/
// file_name = file.kml
return readFile(file_dir_path + file_name).then(fileAs64 => {
console.log(fileAs64);
});FilesystemService
/** Copy Files */
// fileToCopy = file:///storage/emulated/0/Download/file.kml
copyFileToManegeDirectory(fileToCopy: string, directoryToGo: string): Promise<any> {
return Filesystem.checkPermissions().then(permission => {
console.log(permission)
return Filesystem.copy({
from: fileToCopy,
directory: Directory.ExternalStorage,
to: directoryToGo,
toDirectory: Directory.External
}).then(result => {
console.log(result);
})
});
}
/** Read a file and returns a string base 64 */
readFile(path: string): Promise<string> {
return Filesystem.readFile({
path: path
}).then(result => {
return result.data;
});
}我需要知道是否有可能从Android 11上的应用程序的作用域文件夹中获取文件。我的应用程序需要导入设备上任何地方都可以存在的文件(用户选择从哪里)。
离子信息
Ionic CLI : 6.15.1-testing.0 (C:\Users\Gabriel Vieira\AppData\Roaming\npm\node_modules\@ionic\cli)
Ionic Framework : @ionic/angular 5.6.8
@angular-devkit/build-angular : 12.0.2
@angular-devkit/schematics : 12.0.2
@angular/cli : 12.0.2
@ionic/angular-toolkit : 4.0.0
Capacitor:
Capacitor CLI : 3.0.0
@capacitor/android : 3.0.0
@capacitor/core : 3.0.0
@capacitor/ios : not installed
Utility:
cordova-res : 0.15.3
native-run : 1.4.0
System:
NodeJS : v14.16.1 (C:\Program Files (x86)\nodejs\node.exe)
npm : 6.14.12
OS : Windows 10npx帽子医生
Latest Dependencies:
@capacitor/cli: 3.0.1
@capacitor/core: 3.0.1
@capacitor/android: 3.0.1
@capacitor/ios: 3.0.1
Installed Dependencies:
@capacitor/ios: not installed
@capacitor/cli: 3.0.0
@capacitor/android: 3.0.0
@capacitor/core: 3.0.0编辑
试图将目标SDK更改为28和29,但也出现了同样的错误。
文档说,当我需要访问作用域存储之外的文件时,添加标记MANAGE_EXTERNAL_STORAGE,但是这个参数已经包含在我的清单中,即使这样,我也不允许读取作用域存储之外的任何内容。
在使用checkPermissions()和requestPermissions()测试文件系统权限时,这两个函数都返回publicStorage:‘授予’。
发布于 2021-06-22 18:24:35
如果您将正确的目标放在android/variables.gradle中,它应该正常工作,如果没有,则必须在电容GitHub页面中打开一个问题。
ext {
compileSdkVersion = 29
targetSdkVersion = 29
...
}而且你不应该使用MANAGE_EXTERNAL_STORAGE,除非你有一个很好的理由,它可能成为一个麻烦部署在谷歌游戏商店,请参阅谷歌支持页面的更多细节。在您的AndroidManifest中,还保留参数android:requestLegacyExternalStorage="true",并添加用户权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />https://stackoverflow.com/questions/68006813
复制相似问题