Copy to shared Folder "Download" when using TaifunFile not works

Anke,

vielen Dank für deine Antwort.

Am besten ist es vielleicht, wenn du dir mal meine App anschaust.

Unter https://play.google.com/store/apps/details?id=appinventor.ai_frankbalticapps.Wurstrechner
ist sie zu finden. Die Daten werden durch den User in die Datenbank geschrieben. Die Bilder kommen von der Kamera oder aus der Galerie. Dann werden sie im Ordner Pictures in Unterordnern abgelegt.

Über die Sidebar kommt man zum Punkt Daten Backup.

Im folgenden Screen nach Betätigen der Taste "Sichern1" wird zuerst folgendes realisiert:

Anschließend wird die im Post 1 gezeigte Routine aufgerufen.

blocks(1)

Abschließend geschieht dies:

Hier erscheint manchmal das Ergebnis true aber auch manchmal das Ergebnis false (siehe ShowAlert).

Der Aufruf "call SichernGoogle" ist derzeit nur erfolgreich, wenn vor Betätigung des Buttons "Sichern1" der Button "Cr. Folder" betätigt wird.

Der Screen Backup ist noch ein Provisorium. Erst wenn ich genau weiß, wie es klappt, passe ich es für die User der App an.

Gruß Frank

Wie bereits gesagt, du kannst / solltest die Bilder gleich in einem der Shared folder speichern (und nicht erst im ASD), dann bleiben diese auch nach einer Neuinstallation erhalten und sind dann mit READ permission lesbar. Für Android < 11 ist dafür WRITE permission erforderlich.

Hallo Anke,

habe deinen Vorschlag getestet und bin gleich auf ein Problem gestoßen.

Mit dem Block:

werden mir die Bilder angezeigt.

Ersetze ich die Variable PfadPictures durch

werden keine Bilder gezeigt.

Überzeugt habe ich mich, dass dort ebenfalls Bilder vorhanden sind. Eventuell ein Rechteproblem?

Frank

Danke Anke,

aber das ist nicht mein Problem, sorry.

Die Auswahl aus der Galerie und das Fotographieren mit der Kamera erzeugt die Bilder im Ordner

"/storage/emulated/0/Pictures/WurstRechner/Pictures/RID_1/bild1.jpg

Das klappt problemlos.

Nur angezeigt werden sie nicht. Das Image-Komponente zeigt nichts an, es ist nur eine weiße Fläche.

Sorry, dass ich nerve.
Frank

Use a full path:
file:///storage/...

See also here:

Hallo Anke,

habe jetzt deine Idee mit dem Speichern der Bilder in einem Unterordner von "Pictures" realisiert.
Funktioniert soweit auch, sofern ich die App nicht deinstalliere und neu installiere.

Testen kannst du das gerne mit der Google Play Store Version 2.975 meiner App.

Solange ich mit der App arbeite, die die Bilder speichert ist alles okay. Auch nach der Deinstallation der App bleiben die Bilder erhalten, so wie du schon sagtest.

Rechte habe ich beim Initialisieren von Screen1 gegeben.
Block1

Das Problem entsteht nach der Neuinstallation der App. Die gespeicherten Bilder sind für die neu installierte App nicht sichtbar, d.h. sie werden nicht angezeigt. Ich kann zwar neue Bilder per Kamera bzw. Galerie hinzufügen, es werden aber ausschließlich diese Bilder gezeigt. Die Bilder der deinstallierten App sind zwar im gleichen Ordner, werden aber nicht angezeigt in der Image-Komponente.

Es scheint so, dass jede App den Bildern eine Eigenschaft bzw. Merkmal zuordnet, so dass nur diese Bilder von der App auch wieder erkannt und gelesen werden.

Ist dem so? Dann bringt mir die Speicherung im Ordner "Pictures" nichts, da ja die gespeicherten Bilder in der neu installierten App nicht sichtbar sind.

Gruß Frank

Es geht in diesem Forum nicht darum, dass ein PowerUser - oder wer auch immer - nur DEINE Probleme löst, sondern in erster Linie, darum, dass ALLE davon lernen sollen. Also gib erstmal Feedback zu einzelnen Antworten auf deine Fragen (also ob es jetzt so funktioniert hat), bevor du gleich die nächste Frage stellst.

Und wenn du das getan hast, teste einmal diese APK auf deinen Android 11+ Geräten.
Unter Android < 11 sollte es ohnenin keine Probleme geben, da dort generell Zugriff auf den kompletten external storage (mit READ/WRITE permissions) besteht. Die Fotos werden hier gespeichert:
/Pictures/MeineBilder/ (relative path).

Schritte:

  1. App installieren und starten
  2. READ permission nur dann gewähren, wenn die App nicht zuvor schon installiert worden war.
  3. 2-3 Fotos machen (CAMERA permission natürlich gewähren).
  4. Die App schließen und neu starten und 2-3 weitere Fotos machen.
  5. Die App schließen, deinstallieren und neu installieren.
  6. App starten und READ permission JETZT gewähren.
  7. 2-3 neue Fotos machen (CAMERA permission muss natürlich wieder gewährt werden).
  8. App schließen, neu starten.
  9. Prüfen, ob Zugriff auf alle Fotos besteht (auch die in den vorherigen, deinstallierten, App-Versionen gemachten Fotos).
  10. Wiederhole Schritt 5 folgende ...

Wie ich schon sagte, auf Android < 11 muss WRITE permission gewährt werden (diese schließt READ automatisch mit ein).

This forum is not about a power user or whoever solves YOUR problems, but primarily about EVERYONE learning from it. So first give feedback on individual answers to your questions (i.e. whether it worked now) before you immediately ask the next question.

And once you've done that, try this APK on your Android 11+ devices. The photos are stored here:
/Pictures/MeineBilder/ (relative path).

Steps:

  1. Install and start the app
  2. Grant READ permission only if the app hasn't been previously installed.
  3. Take 2-3 pictures (granting CAMERA permission, of course).
  4. Close and restart the app and take 2-3 more photos.
  5. Close, uninstall and reinstall the app.
  6. Start the app and grant READ permission NOW.
  7. Take 2 new photos (CAMERA permission must of course be granted again).
  8. Close app, restart.
  9. Check whether all photos are accessible (including photos taken in previous, uninstalled app versions).
  10. Repeat ...

As I said, on Android < 11, WRITE permission must be granted (this automatically includes READ).
On Android < 11 there shouldn't be any problems anyway, as there is generally access to the entire external storage (with READ/WRITE permissions).

Hallo Anke,

zuerst möchte ich mich entschuldigen.

Es war und ist nicht meine Absicht und Erwartung, dass das Forum nur meine Probleme löst.

Vielen, vielen Dank, dass du dich meinen Fragen und Problemen angenommen hast. Ich habe als Anfänger in der Programmierung von Apps gerade aus deinen Antworten gelernt, dass es seit Android 11 massive Unterschiede beim Arbeiten mit Ordner und Dateien seitens Google gibt.

Meine kleine App hat auf meinem alten Handy (Android Version 9) sehr gut funktioniert und eine Speicherung unter /storage/emulated/0/WurstRechner klappte.
Mit meinem neuen Handy (Android Version 12) funktioniert dies nicht mehr, da in den o.g. Ordner nicht mehr geschrieben werden kann.
Ich hatte dann versucht, alles im ASD zu speichern, was auch funktioniert. Mit Hilfe des TotalCommander kann ich auch ein Backup der wichtigen Dateien anlegen. Nur ein andere Benutzer der App kann dies nicht so einfach.
Der nächste Test war laut deinem Tipp, alle Bilder in den SharedFolder Pictures in ein Unterverzeichnis zu legen. Dies funktioniert mit der aktuellen Version der App auch. Soweit habe ich deinen Tipp umgesetzt und mit der App ausgiebig getestet. Es funktioniert solange, bis ich die App deinstalliere und wieder neu installiere. Dann werden die Bilder der deinstallierten App nicht angezeigt obwohl sie im Ordner sich noch befinden.

Das es einen Weg gibt, zeigt deine App Camera_sharedFolder.apk.

Ich habe sie auf meine Android12-Handy installiert und die Schritte 1 bis 10 ausgeführt. Es klappt ausgezeichnet, vielen vielen Dank für deine Mühen.

Was ich mich frage ist, wie du es gemacht hast. Wärest du so freundlich, mir einen Weg dafür aufzuzeichnen.

Danke und Gruß Frank

I've come a little closer to solving my initial problem (see post #1).
The problem was with the permissions.

The block


doesn't work. It is asked for the permission camera, but the permission ReadExternalStorage or WriteExternalStorage is not queried.

The solution that works for me is:

Thanks to Anke for providing the extension GetApiLevel Version 3.

I hope this helps other users who need multiple permissions in the app.

Now I will work on the other problems and report here.

Frank

Habst du versucht, zu Screen1 Eigenschaften zu gehen und DefaultFileScope auf Legacy zu setzen?

image

Warum?
Da er die TaifunFile extension verwendet, werden die storage permissions korrekt im Manifest deklariert.

Why?
Since he uses the TaifunFile extension, the storage permissions are correctly declared in the Manifest.

1 Like

Ok, ich dachte, er hat die Erweiterung nicht benutzt. Aber das habe ich auf Taifuns Website gesehen

Note: Starting with the SDK30 release most of the methods and events of this extension will still work, except copying files to the external storage (outside the ASD) on devices with Android >= 10, because WRITE permission does no longer exist (with targetSdk = 30). But DefaultFileScope must be set to Legacy (otherwise you will not be able to ask for READ/WRITE permissions for Android versions from 4.4 - 9, API 19 - 28).

Generally my suggestion is to use the corresponding methods from the file component now.
See also the design document here.

Bitte korrigierst du mich, wenn ich falsch liege.

Dieser Hinweis ist nicht korrekt. @Taifun

This note is incorrect. It should be like this:

Note: Starting with the SDK30 release most of the methods and events of this extension will still work, except copying files to the external storage (outside the ASD or one of the Shared folders) on devices with Android >= 11, because WRITE permission does no longer exist on Android 11+ (with targetSdk = 30). But DefaultFileScope must be set to Legacy (otherwise you will not be able to ask for READ/WRITE permissions for Android versions from 4.4 - 9, API 19 - 28).

"Generally my suggestion is to use the corresponding methods from the file component now."

No, that's not my recommendation, at least not until the (permission) bugs with the File component have been fixed.

2 Likes

Scheinbar scheint es doch noch Probleme zu geben mit den Permissions. Die Blöcke sind 4 Posts darüber und nicht geändert worden.

Jetzt bekomme ich zwar angezeigt, die Permission für die Kamera anzugeben und danach die Permission für die Read/Write-Rechte.

Gebe ich dort auch meine Zustimmung, hängt die App und es kommt die Fehlermeldung:

java.lang.StackOverflowError: stack size 8188KB
Note: You will not see another error reported for 5 seconds.

Hängt die App in einer Schleife oder was bedeutet der Fehler?

Frank

Dies düfte eine andere Ursache haben als das Anfordern und Gewähren der permission.
Im Übrigen muss (sollte) die CAMERA permission nicht manuell angefordert werden.
Also mache es so (wobei READ auf Android 11 erst nach dem BACKUP benötigt wird):

Anke,

thanks for the tip. I'll hide the permission for now.

I'm still stuck on my problem with saving to the Download shared folder and a subfolder there.

Is there a bug or error in the file component?

Instead of copying to the subfolder, it creates a file in the Download folder starting with the subfolder name.
To clarify, a test AIA.
TestCopyDownload.aia (4.3 MB)

Greeting Frank

Yes, this is another bug with the File component.

This way the .db file is incorrectly saved in the root dir of the Shared folder /Download.

Try this:

But why don't you just copy from the assets to the shared folder, this way (instead of in the ASD beforehand):

grafik

@ewpatton is this an already known bug?
Sorry, meanwhile I lost the overview about new/already known bugs...

Taifun

1 Like

No wonder, me too.