Hallo,
als blutiger Anfänger habe ich zwei Apps mit Kivy geschrieben und mit buildozer umgesetzt. Beide Apps zeigen auf dem Handy den gleichen Effekt:
ich will mit glob die Dateien im Ordner Documents auslesen, erhalte aber eine leere Liste. Verzeichnisse und Unterverzeichnisse lassen sich auslesen. Wenn ich mit der App eine Datei erzeuge, zeigt mir glob nur diese Datei an. Mit Totalcommander kann ich keine Unterschiede in den Rechten zu anderen, nicht erkannten Dateien erkennen.
Unter Ubuntu gibt es keine Probleme.
Hat jemand eine Idee?
Danke im voraus!
glob.glob() über Kivy auf android
Ich habe das Problem halbwegs gelöst:
Standgemäß muss das Recht request_permissions([Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE])
nicht angefordert werden. Dateien können geschrieben und gelesen werden. Aber in der Berechtigungsverwaltung auf dem Handy wird angezeigt: "Keine Berechtigung angefordert" und man bekommt kein Zugriff auf die Berechtigungen.
Benötigt wird aber das Recht request_permissions([Permission.MANAGE_EXTERNAL_STORAGE]). Wird die in der App gefordert, kommt es zum Absturz der App.
Wenn das Recht request_permissions([Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE]) in der App angefordert wird, erscheint jetzt in der Berechtigungsverwaltung auf dem Handy das Recht "Dateien und Medien". Nach Wählen dieses Eintrages erscheint die Möglichkeit "Verwaltung aller Dateien zulassen". Wird Diese Recht erteilt, sind nun mit glob.glob() alle Dateien sichtbar!
Gibt es einen Weg das Recht request_permissions([Permission.MANAGE_EXTERNAL_STORAGE]) direkt aus der App anzufordern?
Danke im Voraus für eine Antwort!
Standgemäß muss das Recht request_permissions([Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE])
nicht angefordert werden. Dateien können geschrieben und gelesen werden. Aber in der Berechtigungsverwaltung auf dem Handy wird angezeigt: "Keine Berechtigung angefordert" und man bekommt kein Zugriff auf die Berechtigungen.
Benötigt wird aber das Recht request_permissions([Permission.MANAGE_EXTERNAL_STORAGE]). Wird die in der App gefordert, kommt es zum Absturz der App.
Wenn das Recht request_permissions([Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE]) in der App angefordert wird, erscheint jetzt in der Berechtigungsverwaltung auf dem Handy das Recht "Dateien und Medien". Nach Wählen dieses Eintrages erscheint die Möglichkeit "Verwaltung aller Dateien zulassen". Wird Diese Recht erteilt, sind nun mit glob.glob() alle Dateien sichtbar!
Gibt es einen Weg das Recht request_permissions([Permission.MANAGE_EXTERNAL_STORAGE]) direkt aus der App anzufordern?
Danke im Voraus für eine Antwort!
Soweit mir bekannt kann das nicht gehen.
Ich habe einmal folgendes verwendet.
Im Code;
Damit holst du dir die Erlaubnis vom User, dass die App das gerade betzt machen darf. Und der User wird dann wie üblich gefragt ob er den Zugriff erlauben will.
Damit Das funktioniert muss in das .spec File:
Das kannst du auf gar keinen Fall irgendwie dynamisch während der Laufzeit anfordern, weil das die grundlegende Bedingung für die App ist. Damit sagst du: Meine App möchte Zugriff auf deine Dateien. Und dann kann man als Benutzer sagen: Das klingt Fishi. Und zwar schon vor der Installation.
Spec File: Meine App kann das Recht potentiell anfordern.
Code: Das tatsächliche Anfordern.
Ich habe einmal folgendes verwendet.
Im Code;
Code: Alles auswählen
from android.permissions import request_permissions, Permission
request_permissions([Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE])
Damit Das funktioniert muss in das .spec File:
Code: Alles auswählen
android.permissions = WRITE_EXTERNAL_STORAGE
Spec File: Meine App kann das Recht potentiell anfordern.
Code: Das tatsächliche Anfordern.
im code steht vor dem build Aufruf:
if platform == 'android':
defaultpath = '/storage/emulated/0/Documents/'
from android.permissions import request_permissions, Permission
request_permissions([Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE, MANAGE_EXTERNAL_STORAGE])
im .spec file steht:
android.permissions = WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE, MANAGE_EXTERNAL_STORAGE
es folgt ab und zu die Rechte-Abfrage im Handy. Bei Android 11 klappt es oft, bei Android 14 wird der App keinerlei Recht erteilt, eine Abfrage erfolgt auch nicht.
Ich probiere jetzt mit
# (int) Target Android API, should be as high as possible.
android.api = 35
# (int) Minimum API your APK / AAB will support.
android.minapi = 28
im .spec file
Danke für Deine Antwort
if platform == 'android':
defaultpath = '/storage/emulated/0/Documents/'
from android.permissions import request_permissions, Permission
request_permissions([Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE, MANAGE_EXTERNAL_STORAGE])
im .spec file steht:
android.permissions = WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE, MANAGE_EXTERNAL_STORAGE
es folgt ab und zu die Rechte-Abfrage im Handy. Bei Android 11 klappt es oft, bei Android 14 wird der App keinerlei Recht erteilt, eine Abfrage erfolgt auch nicht.
Ich probiere jetzt mit
# (int) Target Android API, should be as high as possible.
android.api = 35
# (int) Minimum API your APK / AAB will support.
android.minapi = 28
im .spec file
Danke für Deine Antwort