0

我的应用在 Android 6.0.1 上运行。它是用 Python/Kivy 编写的,我希望这无关紧要。

我的数据可能会变大。它不是私人的。我希望用户能够从 PC 访问。所以,我想将它存储在我的测试设备的外部SD 卡上。

是的,我在清单中指定了我想要WRITE_EXTERNAL_STORAGE的(通过 buildozer.spec 文件)。我通过检查设备上的应用程序管理器中的应用程序确认这已经奏效。它具有正确的权限。

是的,我在运行时再次请求权限,在启动时立即。(请参阅相关问题Why can't I write to Android External Storage? and Can't write in external storage)我通过提供回调确认这已经奏效。授予读取和写入权限。

然后我的应用程序获取 python-for-android 的secondary_external_storage_path(). 奇怪的是,它返回 None!检查它的源代码,它首先尝试android.os.Environment在使用一些基于环境变量的启发式方法之前进行询问。根据我的估计 using adb shell,它应该找到SECONDARY_STORAGE已声明但设置为/storage/extSdCard- 一个不存在的位置的环境变量!- 所以它在那里失败并返回无。

因此受阻,我暂时对地址进行了硬编码:/storage/3143-6351/并在其下创建了一个子目录。

我将一些文件推送到该目录中。

这是其中一个文件的 ls 输出。在我不专业的眼里,这些权限似乎是合理的。

-rwxrwx--x root sdcard_rw 0 2020-07-07 16:13 heard.csv

父目录具有类似的权限。

我的应用程序启动,愉快地读取此目录中的文件,但是当它尝试写入时:

PermissionError: [Errno 13] Permission denied: '/storage/3143-6351/{path ellided}/heard.csv'

当我处理主要的辅助存储(即不是隐藏的应用程序存储,而是直接在手机上的共享存储(但被混淆地称为/sdcard)时,这曾经可以工作。

为什么我在被授予读取权限时被拒绝写入权限?

4

0 回答 0