Seite 1 von 1

TXT-Datei auf Android 13 erstellen

Verfasst: Montag 13. November 2023, 19:49
von DMD-OL
Hallo zusammen
Ist es eigentlich möglich, mit Python Kivy (buildozer) eine TXT-Datei auf einem Android 13-Mobiltelefon (z.B. im Ordner "Dokumente") zu erstellen?

Re: TXT-Datei auf Android 13 erstellen

Verfasst: Montag 13. November 2023, 22:08
von Dennis89
Hallo,

hilft dir dieses Thread weiter?
https://stackoverflow.com/questions/655 ... 11-in-kivy

Hast du es schon probiert und ein bestimmtes Problem?

Grüße
Dennis

Re: TXT-Datei auf Android 13 erstellen

Verfasst: Mittwoch 15. November 2023, 19:47
von DMD-OL
Thx. Ich werde das mal durcharbeiten und mich dann wieder melden...

Re: TXT-Datei auf Android 13 erstellen

Verfasst: Mittwoch 15. November 2023, 22:21
von DMD-OL
Habe mir das mal angeschaut und rumprobiert. Wär gut, wenn ich fürs Erste einen für Android-Geräte allgemein gültigen Pfad hätte (, den man vielleicht sogar von Gerät auslesen kann)?
Auf dem internen Speicher eines jeden Geräts gibt es doch Standardordner wie DCIM oder Documents.
Habe dazu erst einmal das hier gefunden: https://stackoverflow.com/questions/677 ... droid-data
Da steht oben der Pfad: "storage/emulated/0/Android/data"
Ich habe jetzt den Versuch gemacht, mit einem Button auf:

Code: Alles auswählen

    def button_save_down(self):
        documents_path = os.path.join(os.path.expanduser('~'), 'Documents')
        self.gps_save = str(documents_path)
einen regulären Pfad ausgegeben zu bekommen.
Das hat geklappt.
self.gps_save ist ein StringProperty das auf das Label "lbl_save" zeigt.
Wenn ich also auf den Button in meiner App drücke, wird mir "/data/Documents" im Label angezeigt.
Wie kann ich jetzt weitermachen, um eine txt-Datei dort zu speichern, die ich text.txt nennen möchte?
Welche Berechtigungen brauche ich dazu? Da gibt es ja sehr viele Angabe im Netz dazu.

Re: TXT-Datei auf Android 13 erstellen

Verfasst: Mittwoch 15. November 2023, 22:51
von Dennis89
Das mit der Berechtigung steht in dem Link, den du gepostet hast. Du musst die *.spec - Datei bearbeiten.
Wenn du den Pfad hast, dann kannst du ganz "normal" eine Datei erstellen. Steht auch in deinem Link, nur die Einrückung passt dort nicht ganz.
https://docs.python.org/3/tutorial/inpu ... ting-files

Ich habe aber keine Erfahrung damit, aber ich würde es mal so versuchen.

Grüße
Dennis

P.S. In der Doku zu 'os' wird auf das neuere 'pathlib' für das arbeiten mit Pfaden hingewiesen.

Re: TXT-Datei auf Android 13 erstellen

Verfasst: Donnerstag 16. November 2023, 20:53
von DMD-OL
Beim Pfad bin ich mir unsicher.
Ist dieser richtig?

Code: Alles auswählen

foldername='/storage/emulated/0/Documents'
Nach der Antwort hier zusammen gereimt:
https://stackoverflow.com/questions/748 ... vy-and-bui

Re: TXT-Datei auf Android 13 erstellen

Verfasst: Sonntag 19. November 2023, 18:02
von DMD-OL
Mmmmh, wieso bekomme ich den Fehler

Code: Alles auswählen

Permission denied: '/storage/emulated/0/Documents/Test.txt'
obwohl ich doch direkt nach dem Übertragen meiner Kivy-App auf mein Android 11 die Erlaubnis

Code: Alles auswählen

        request_permissions([Permission.ACCESS_COARSE_LOCATION,
                             Permission.ACCESS_FINE_LOCATION,
                             Permission.WRITE_EXTERNAL_STORAGE,
                             Permission.READ_EXTERNAL_STORAGE
                             ], callback)
mit meinem Handy erteile.
Nach erstmaligem Übertragen mit neuem Dateinamen (z.B. Test_2) funktioniert alles gut.
Wenn ich aber meinen Code weiterschreibe und den dann auf mein Handy übertrage, bekomme ich die oben angegebene Fehlermeldung
'Permission denied: Permission denied: '/storage/emulated/0/Documents/Test.txt'.
Kann mir jemand helfen, eine schon benutze Test.txt-Datei vollständig zu löschen, damit es dann ganz neu wieder übertragen werden kann oder
eine Berechtigung für eine schon vorher erstellte txt-Datei neu zu erhalten?
Hier mein Code-Schnipsel:

Code: Alles auswählen

        if platform == 'android':
            environment = autoclass('android.os.Environment')
            if environment.getExternalStorageState() == environment.MEDIA_MOUNTED:
                # root = environment.getExternalStorageDirectory().getAbsolutePath()
                root = environment.getExternalStoragePublicDirectory(environment.DIRECTORY_DOCUMENTS).getAbsolutePath()
            else:
                # root = context.getExternalFilesDir().getAbsolutePath()
                root = os.getcwd() + '/tmp/'
            # root += '/knapps_apps.reduce/'

            pather = os.path.join(root, "GPS-Daten.txt")
            if not os.path.isfile(pather):
                with open(pather, "w") as writer:
                    if self.gps_location is None:
                        writer.write("Hello World")
                    else:
                        writer.write(str(self.gps_location))
            else:
                try:
                    fob = open(pather, 'w')
                    fob.write(str(self.gps_location))
                    fob.close()
                except Exception as e:
                    self.gps_location = str(e)

Re: TXT-Datei auf Android 13 erstellen

Verfasst: Sonntag 19. November 2023, 18:18
von __deets__
Ich kenne mich mit Android und diesem Problem inhaltlich nicht aus. Aber "permission denied" bekommst du auch, wenn der Pfad zu deiner Datei nicht existiert. Nicht nur, wenn du es sonst nicht darfst. Und ich haette jetzt gesagt, irgendwas mit "emulated" im Namen ist nicht "the real deal". Sondern ein Pfad, der in deiner Testumgebung existiert, aber nicht auf dem Android Geraet. Schreib dir doch einfach mal Code, der die Dateien/Pfade auflistet und ausgibt, um da mal einen Ueberblick zu bekommen.

Re: TXT-Datei auf Android 13 erstellen

Verfasst: Sonntag 19. November 2023, 22:54
von DMD-OL
Hab ich versucht.... Ist noch in Arbeit.... :)
Mir ist aber grad noch was anderes gekommen!
Kann ich nicht in meinem Python Kivy Code eine Textdatei erzeugen, die ich dann mit in die App nehme???
Die müsste ich dann nur richtig (aber wie?) in der Spec-Datei angeben.

Re: TXT-Datei auf Android 13 erstellen

Verfasst: Montag 20. November 2023, 07:06
von Dennis89
Hallo,

siehst deine *.spec - Datei so aus?
https://raw.githubusercontent.com/kivy/ ... fault.spec

Da gibt es einen Zeile mit 'includes'.

Grüße
Dennis

Re: TXT-Datei auf Android 13 erstellen

Verfasst: Dienstag 21. November 2023, 19:33
von DMD-OL
Meine Spec sieht so aus ja. Es gibt da aber mehrere includes. Ma sehn was und wo da was reinkommt...

Ich bin mir nicht ganz sicher, aber man darf glaube ich nicht die übertragene App und die Textdatei löschen, bevor man neu überträgt.
Ich habe das immer gemacht, so dass dann die apk und die Textdatei neu aufs Handy übertragen wurden.
Dadurch verliert man die Berechtigung für die "alte" Textdatei, glaub ich.

Ich hatte das glaub ich mal, dass ich das vorherige Löschen vergessen habe, dadurch habe ich wohl die "alte" Berechtigung für die "alte" Textdatei bekommen.
Hab einfach alles übertragen, dann in Python Code geändert und direkt wieder alles übertragen.
Dadurch konnte ich auch die alte Textdatei wieder benutzen ohne mir einen neuen Namen für die Textdatei ausdenken zu müssen.
:)
Muss ich aber noch mal ganz bewusst ausprobieren, um wirklich sicher zu gehen.
Meld mi noch ma...

Re: TXT-Datei auf Android 13 erstellen

Verfasst: Dienstag 21. November 2023, 22:18
von DMD-OL
JAA, wenn man nix löscht, sondern ändert und einfach überträgt, behält man alle Rechte!
Cheers... :)