TXT-Datei auf Android 13 erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DMD-OL
User
Beiträge: 316
Registriert: Samstag 26. Dezember 2015, 16:21

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?
Benutzeravatar
Dennis89
User
Beiträge: 1157
Registriert: Freitag 11. Dezember 2020, 15:13

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
"When I got the music, I got a place to go" [Rancid, 1993]
DMD-OL
User
Beiträge: 316
Registriert: Samstag 26. Dezember 2015, 16:21

Thx. Ich werde das mal durcharbeiten und mich dann wieder melden...
DMD-OL
User
Beiträge: 316
Registriert: Samstag 26. Dezember 2015, 16:21

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.
Benutzeravatar
Dennis89
User
Beiträge: 1157
Registriert: Freitag 11. Dezember 2020, 15:13

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.
"When I got the music, I got a place to go" [Rancid, 1993]
DMD-OL
User
Beiträge: 316
Registriert: Samstag 26. Dezember 2015, 16:21

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
DMD-OL
User
Beiträge: 316
Registriert: Samstag 26. Dezember 2015, 16:21

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)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
DMD-OL
User
Beiträge: 316
Registriert: Samstag 26. Dezember 2015, 16:21

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.
Benutzeravatar
Dennis89
User
Beiträge: 1157
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

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

Da gibt es einen Zeile mit 'includes'.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
DMD-OL
User
Beiträge: 316
Registriert: Samstag 26. Dezember 2015, 16:21

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...
DMD-OL
User
Beiträge: 316
Registriert: Samstag 26. Dezember 2015, 16:21

JAA, wenn man nix löscht, sondern ändert und einfach überträgt, behält man alle Rechte!
Cheers... :)
Antworten