Получение ошибки [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»