Beim Versuch, mit Kivy und Python auf Android in /storage/emulated/0 zu schreiben, wird der Fehler „[Errno 1] Operation Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Beim Versuch, mit Kivy und Python auf Android in /storage/emulated/0 zu schreiben, wird der Fehler „[Errno 1] Operation

Post by Anonymous »

Ich treibe nun schon seit ein paar Wochen herum und versuche, das Schreiben einer Datei auf einem Android-Handy umzusetzen. Mein Entwicklungssetup ist auf einem Windows-PC mit Anaconda und Pycharm. Ich verwende Kivy und Buildozer, um die Android-App zu erstellen. Meine Test-App versucht einfach, eine Datei (test.txt) in das Stammverzeichnis der SD-Karte auf dem Telefon zu schreiben.
Das Verzeichnis ist: /storage/emulated/0
Die Fehlermeldung, die ich erhalte, ist: [Errno 1] Vorgang ist nicht zulässig: '/storage/emulated/0/test.txt'
Ich frage nach Berechtigungen im Code, aber die Berechtigungen sind nicht vorhanden Wird beim Start oder bei der Installation der Anwendung dazu aufgefordert.
Hier ist der Code;

Code: Select all

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()
Hier sind die Screenshots während des Tests;
Schaltfläche „Verzeichnis anzeigen“
Geben Sie hier die Bildbeschreibung ein
Schaltfläche „Datei schreiben“
Geben Sie hier die Bildbeschreibung ein
Vielen Dank für Ihre Hilfe.
Ich habe eine Reihe von Dingen ausprobiert ... Berechtigungen in der Datei buildozer.spec hinzugefügt, den Ausgabespeicherort in das interne user_data_dir geändert (was funktioniert hat, I Denken Sie, aber ich brauche, dass der Benutzer die Dateien-App verwenden kann, um die generierte Datei abzurufen)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post