Получение ошибки [Errno 1] Операция не разрешена при попытке записи в /storage/emulated/0 с помощью Kivy и Python на AndAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Получение ошибки [Errno 1] Операция не разрешена при попытке записи в /storage/emulated/0 с помощью Kivy и Python на And

Сообщение Anonymous »

Я уже несколько недель гуляю по тутовому кусту, пытаясь реализовать запись файла на телефоне Android. Моя установка для разработки находится на ПК с Windows с Anaconda и Pycharm. Я использую 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 (думаю, это сработало, но Мне нужно, чтобы пользователь мог использовать приложение «Файлы» для получения сгенерированного файла)

Подробнее здесь: https://stackoverflow.com/questions/763 ... te-to-stor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»