Python:Android 上的权限被拒绝问题
Python: Permission denied problem on Android
我只是想将来自网站的 .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(),而不是提供绝对路径。
我只是想将来自网站的 .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(),而不是提供绝对路径。