Python:Android 上的权限被拒绝问题

问题描述 投票:0回答:2

我只想将网站上的

.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 框架。

python android python-3.x save
2个回答
1
投票

您肯定需要 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(),而不是提供绝对路径,其余代码看起来也不错。


0
投票

如果您使用 BUILDOZER 部署 .apk,则必须在 .py 代码中设置权限,如上所述,并且必须以这种方式在 .spec 文件中更改权限行:

android.permissions = android.permission.READ_EXTERNAL_STORAGE,android.permission.WRITE_EXTERNAL_STORAGE

请记住,您可以在 /storage/emulated/0/Download 目录中写入文件,但如果该文件不是由您的代码生成的,您的代码将无法读取该目录中的文件。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.