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

I want to copy files from the ASD to the shared storage download with the extension TaifunFile (version 14a).

The files are not copied on my Android 12 phone.

What am I doing wrong?

Frank

It should work unless you tested with Companion before and you try the APK afterwards (or vice versa). The files must be deleted beforehand with the respective app (Companion or APK) so that it works with both (at least on Android 11+).

Note: You cannot overwrite or access files created by other apps on Android 11+.

Du kannst auf Android 11+ keine Dateien, die von anderen Apps erstellt wurden, überschreiben oder auf diese zugreifen.

Does the directory already exist?
Remember, you only copy if the directory does not exist.
Also what do you get in the Copied event? Any error message?

Taifun

You can also put your blocks in the .DirectoryCreated event:

grafik

Danke Anke und Taifun.

Ich bin langsam am verzweifeln. Meine App teste ich unter Android 12 auf meinem Handy.

Meine App speichert Informationen in einer SQLite-Datenbank und legt ein Verzeichnis Pictures mit Unterordner im ASD an, wobei die Unterordner Bilder enthalten.

Die Datenbank sichere ich in einer Datei WurstSQLite.db und den Ordner "Pictures" mit allen Unterordner und Bilder packe ich in die Datei Pictures.zip im ASD.
Herzlichen Dank an Taifun für die passenden Extensions.

Das klappt alles super gut.

Nun möchte ich, dass die App diese Informationen speichert und nach einer Neuinstallation wieder einliest in die App also ein klassisches Backup und Restore.

Am besten wäre es, wenn alles ins Google Drive des Users geschrieben wird. Mit Tims GDConnector kann ich die kleine SQLite-Datei schon nach Google kopieren. Die große Datei (je nach Anzahl der Bilder 25 bis 80 MB groß) lässt sich leider nicht mit GDConnector nach Google kopieren wegen Beschränkung auf ca. 25 MB.
Auch weiß ich noch nicht, ob ich die SQLite-DB wieder in die gleiche aber neu installierte App eingelesen werden kann.
Android 12 macht es unwahrscheinlich schwer zwecks Dateispeicherung im external storage des Handies bzw. auf Google Drive.

Die Variante Google Drive wäre mir am liebsten.

Wenn dies nicht klappt, habe ich mir gedacht, dass die beiden Dateien im Verzeichnis Download in einem Unterordner gesichert werden.

Dies scheint aber auch nicht so einfach (siehe Anke's Post), da nur die App, die die Dateien dort hin kopiert, auch wieder auf diese Dateien zugreifen kann. Scheint also auch eine Sackgasse zu sein.

Ich bräuchte also eine Methode, die beiden Dateien irgendwo (Google Drive? oder wo anders) sichert und von dort wieder mit der neu installierten App einlesen kann.

Habt ihr eine Idee, welche effektiv ist und unter Android 12 funktioniert?

Danke Frank

What information and where does it come from? Is this information from the respective user or general information? What exactly is the goal / purpose of your app?

Therefore, in my guide, I always point out to explain what exactly the goal is.

Which images? Where do they come from?

Fragen über Fragen! :wink:
Also erkläre mal, worum es eigentlich geht.
*___________________

Nachtrag: Die Bilder (25-80MB) kannst du im Shared storage speichern (e.g. /DCIM/myImages/... oder /Pictures/myImages/ etc). Dann sind diese auch nach einer Neuinstallation verfügbar und es kann mit READ permission darauf zugegriffen werden.

Addendum: You can save the images (25-80MB) in the Shared storage (e.g. /DCIM/myImages/... or /Pictures/myImages/ etc). Then these are available also after a new installation and can be accessed with READ permission.

Sieh dir mal meine Übersicht hierzu an:

Bezüglich der non-media Dateien (SQLite-DB) kommst du um eine Server-Lösung nicht herum oder du musst nach der Neuinstallation mit SAF (Storage Access Framework) darauf zugreifen.

With regard to the non-media files (SQLite-DB), you cannot avoid a server solution or you have to access them with SAF (Storage Access Framework) after the new installation.

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