我已经在桑树丛里呆了几个星期了,现在正在尝试在 Android 手机上实现文件写入。 我的开发设置是在装有 Anaconda 和 Pycharm 的 Windows PC 上进行的。 我正在使用 kivy 和 buildozer 来创建 Android 应用程序。 我的测试应用程序只是尝试将文件(test.txt)写入手机上SD卡的根目录。
目录为:/storage/emulated/0
我收到的错误是:[Errno 1] 不允许操作:'/storage/emulated/0/test.txt'
我在代码中请求权限,但是应用程序启动或安装时没有提示权限。
这是代码;
import kivy
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.utils import platform
import os
class MyGridLayout(GridLayout):
def __init__(self, **kwargs):
super(MyGridLayout, self).__init__(**kwargs)
self.cols = 1
self.dir_button = Button(text="Show Directory")
self.dir_button.bind(on_press=self.press_dir)
self.add_widget(self.dir_button)
self.write_button = Button(text="Write File")
self.write_button.bind(on_press=self.press_write)
self.add_widget(self.write_button)
self.text_field = TextInput(multiline=True)
self.add_widget(self.text_field)
def press_dir(self, instance):
if platform == 'android':
from android.storage import primary_external_storage_path
self.file_dir = primary_external_storage_path()
else:
self.file_dir = App.get_running_app().user_data_dir
if not os.path.exists(self.file_dir):
os.mkdir(self.file_dir)
self.text_field.text = self.file_dir
def press_write(self, instance):
self.file_name = "test.txt"
self.full_name = os.path.join(self.file_dir, self.file_name)
try:
with open(self.full_name, "w") as outfile:
outfile.write("Hello World")
except Exception as e:
self.text_field.text = str(e)
class TestWriteApp(App):
def build(self):
return MyGridLayout()
if platform == 'android':
from android.permissions import request_permissions, Permission
request_permissions([Permission.WRITE_EXTERNAL_STORAGE,
Permission.READ_EXTERNAL_STORAGE])
testwriteapp = TestWriteApp()
testwriteapp.run()
以下是测试时的截图; 显示目录按钮 在此输入图片描述
写入文件按钮 在此输入图片描述
感谢您的帮助。
我尝试了很多事情...在 buildozer.spec 文件中添加权限,将输出位置更改为内部 user_data_dir (我认为这有效,但我需要用户能够使用“文件”应用程序来获取生成的文件)
在 Android 11+ 设备上,您无法再像您尝试的那样写入外部存储的根目录。
而是使用已有的公共目录,例如文档和下载。
在 Android 13 设备上,您不需要任何权限即可执行此操作。
文件数据AIMBOT‼️100% VIP.7z 1 无法打开输出文件:errno=1:不允许操作:/storage/emulated/0/Download/FILES DATA AIMBOT‼️ 100%/⚠️ peringatan |||警告⚠️/BACA⚠️____________________________________________________________ GUNA FILES INI DI AKUN KECIL SAJA ||| TIDAK DI SARANKAN DI GUNAKAN DI AKUN UTAMA ‼️ 2 无法打开输出文件:errno=1:不允许操作:/storage/emulated/0/Download/FILES DATA AIMBOT‼️ 100%/⚠️ peringatan |||警告⚠️/阅读⚠️____________________________________________________________ 仅在小帐户上使用这些文件|||不建议在主账户上使用‼️