我只想将网站上的
.mp3
文件保存到 Android 上的 /storage/emulated/0/Download
文件夹中,但我总是得到 Errno 13 Permission denied
。
这是示例代码:
import requests
# full path to mp3 file in website example
target_link = 'https://www.yt-download.org/download/IFtwhMK64H8/mp3/128/1630338605/f2803874069bf196561631cea2b1b11c2b1d2f9555e2baf751eb28b46d484bb5/0.mp3'
r = requests.get(target_link)
# downloading it into download folder on Android
with open('/storage/emulated/0/Download/file.mp3', 'wb') as f:
f.write(r.content)
更新: 忘了说我使用 Kivy 作为 GUI 框架。
您肯定需要 WRITE_EXTERNAL_STORAGE 权限。 在最新的 Android 版本上,必须明确请求该权限。 然后你必须使用这样的东西:
from android.permissions import Permission, request_permissions, check_permission
def check_permissions(perms):
for perm in perms:
if check_permission(perm) != True:
return False
return True
perms = [Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE]
if check_permissions(perms)!= True:
request_permissions(perms)
这将确保您拥有所有必需的权限并且用户明确授予它们。请注意,您每次都必须检查它们,因为用户可以在应用程序外部撤销它们。
即使我最好使用primary_external_storage_path(),而不是提供绝对路径,其余代码看起来也不错。
如果您使用 BUILDOZER 部署 .apk,则必须在 .py 代码中设置权限,如上所述,并且必须以这种方式在 .spec 文件中更改权限行:
android.permissions = android.permission.READ_EXTERNAL_STORAGE,android.permission.WRITE_EXTERNAL_STORAGE
请记住,您可以在 /storage/emulated/0/Download 目录中写入文件,但如果该文件不是由您的代码生成的,您的代码将无法读取该目录中的文件。