所以我使用
open_file
库来打开一些pdf文件。当我使用 getApplicationDocumentsDirectory()
从缓存存储切换到应用程序的本地文档文件夹存储时,文件无法打开。使用
var result = await OpenFile.open(filePath);
print(result.message);
返回
Permission denied: android.permission.MANAGE_EXTERNAL_STORAGE
我的文件路径的格式为
/data/user/0/com.example.<app name>/app_flutter/New-Note-2024-09-19-00-02-48.pdf
有点奇怪,我需要权限才能访问我的应用程序的本地存储
尽管如此
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<application
....
</manifest>
在我的 AndroidManifest.xml 中,这是我用于请求权限的 flutter 代码:
Future<void> requestStoragePermission() async {
if (await Permission.storage.request().isGranted) {
// Permission granted
} else {
openAppSettings();
// Handle permission denied
print("Storage permission denied");
}
}
但是它自动默认为“权限被拒绝”,而我什至没有做任何事情。
如果我进入应用程序设置,它会显示“没有请求权限”并输出
No permissions found in manifest for: []15
。
我什至尝试在我的清单上添加
READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
,但仍然不起作用。
我终于找到了解决方案,问题是使用
getApplicationDocumentsDirectory()
,应该使用getExternalStorageDirectory()
。
这应该是我自然想到的,因为通过使用应用程序的本地文档目录来保存文件,我试图在运行时从另一个外部应用程序访问我的应用程序的本地文件
Openfile.open()
,这是行不通的。就像您无法从文件管理器浏览应用程序的本地目录一样(除非已获得 root 权限)。