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?
TXT-Datei auf Android 13 erstellen
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
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]
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:
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.
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)
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.
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.
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]
Beim Pfad bin ich mir unsicher.
Ist dieser richtig?
Nach der Antwort hier zusammen gereimt:
https://stackoverflow.com/questions/748 ... vy-and-bui
Ist dieser richtig?
Code: Alles auswählen
foldername='/storage/emulated/0/Documents'
https://stackoverflow.com/questions/748 ... vy-and-bui
Mmmmh, wieso bekomme ich den Fehler
obwohl ich doch direkt nach dem Übertragen meiner Kivy-App auf mein Android 11 die Erlaubnis
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
Permission denied: '/storage/emulated/0/Documents/Test.txt'
Code: Alles auswählen
request_permissions([Permission.ACCESS_COARSE_LOCATION,
Permission.ACCESS_FINE_LOCATION,
Permission.WRITE_EXTERNAL_STORAGE,
Permission.READ_EXTERNAL_STORAGE
], callback)
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)
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.
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.

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.
Hallo,
siehst deine *.spec - Datei so aus?
https://raw.githubusercontent.com/kivy/ ... fault.spec
Da gibt es einen Zeile mit 'includes'.
Grüße
Dennis
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]
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...
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...