为什么我无法写入Android的外部二级存储?

时间:2020-07-07 10:29:05

标签: android kivy android-permissions android-6.0.1-marshmallow

我的应用程序在Android 6.0.1上运行。它是用Python / Kivy编写的,我希望这是不相关的。

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

是的,我指定要在清单中添加WRITE_EXTERNAL_STORAGE(通过buildozer.spec文件)。 我通过检查设备上的“应用程序管理器”中的应用程序来确认此方法是否有效。它具有正确的权限。

是的,我在运行时立即在启动时再次请求权限。 (请参阅相关问题Why can't I write to Android External Storage?Can't write in external storage)我通过提供回调来确认此方法是否有效。授予读写权限。

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

因此,我受到挫败,我暂时对地址/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)时,此方法可以正常工作。

为什么在被授予读权限的同时被拒绝写权限?

0 个答案:

没有答案