AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10
Ich unterscheide auch immer zwischen zwei Dingen:
1. Will ich wirklich, dass der User über Geräte hinweg mit Daten arbeiten kann; da nutze ich aktuell die myCloudData-Datenbank von TMSSoftware 2. Will ich nur, dass der User auf einem Gerät die Daten aus meiner App z.B. im Browser benutzen kann und dafür nutze ich den Download-Ordner a) bei iOS gibt es keinen solchen Ordner, sondern man muss direkt in die iCloud Drive, was schon mal deutlich aufwändiger ist b) bei Android wird dies ab Android 11 jetzt auch schwieriger, aber sicherlich nicht unmöglich (hoffe ich mal) |
AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10
3. Will ich dass mein Programm auch Offline funktioniert, ohne dass man zwingend Netz/WLAN hat.
Bei Android war es früher schon nicht einfach, einen schönen Platz zu finden, wo Dateien auch von anderen Programmen gelesen und vielleicht sogar geändert werden können. Wenn keine SD-Karte vorhanden war, wurde es schon schwerer. Ich weiß auch nicht, warum es sooooo schlimm ist, auf den Geräten einen Speicherplatz zur Verfügung zu stellen, auf den alle Programme Zugriff haben, notfalls mit einer Whitelist, wo man anderen (definierbaren) Apps Lese- und vielleicht sogar Schreibrechte gewährt. (so als Frage an die OS-Hersteller und deren kranke Vorstellungen) |
AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10
Tach zusammenthema
Sorry, wenn ich dieses Thema nochmals aufwärme, aber ich bin erst seit kurzem mit diesem Thema konfrontiert. Unsere App speicherte bis Anhin die Dateien im Ordner SharedDocuments ab. Das klappt mit Android 11 nun nicht mehr. Das ist zwar schade, dass nun diese Dateien per USB gesichert/editiert werden können, aber damit habe ich vermutlich in Zukunft zu leben. Ein User hat vorher im Thread gefragt, wie das nun in Delphi anzuwenden sei, aber keine Antwort erhalten. Da ich momentan auch noch keinen Plan habe wie das mit "Scoped Storage" funktioniert, würde mich das auch sehr stark interessieren. Zudem konnten wir bis anhin die IMEI des Geräts auslesen, dies scheint nun auch unterbunden zu werden. Dürfte wohl die gleiche Sicherheitsproblematik betreffen und ähnlich zu lösen zu sein. Als weiteres muss unsere App auf Mediendateien, Kamera und Mikrofon zugreifen können. Für die Sounddateien existiert zwar ein Beispiel, aber ich blicke da noch nicht so ganz durch. Herzlichen Dank für eure Unterstützung Patrik |
AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10
Es gibt die Möglichkeit einen System Datei Speichern Dialog aufzurufen,
benötigt Android APIs Nutzung. Der liefert einen Contest Provider oder so zurück und der kann mittels Android APIs Stream mäßig benutzt werden und da könntest du deinen Dateiinhalt reinschreiben. |
AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10
Ansonsten geht ja die eine funktionierende Lieblingslösung der Hersteller über ihre Cloud. :stupid:
|
AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10
Ich habe über die beiden Varianten jetzt mal ein paar Minuten drüber geschaut und weiß noch nicht genau, wie sich dies mit Delphi umsetzen lässt:
1. Update your app to use more privacy friendly best practices, such as the Storage Access Framework or Media Store API 2. Update your app to declare the All files access (MANAGE_EXTERNAL_STORAGE) permission in the manifest file, and complete the All files access permission declaration in Play Console from May 5th Wenn hier jemand ein Code-Beispiel hat, gerne her damit. Im Grundsatz geht es mir v.a. darum Dateien im SharedDownloads-Verzeichnis von Android abzulegen, da man dann im Browser darauf zugreifen soll. 3. Als Alternative wurde ja schon das Google-Drive angesprochen. Kann man das Google-Drive des angemeldeten Benutzers über einen Pfad einfach ansprechen (so wie es unter iOS funktioniert)?
Delphi-Quellcode:
nsFile := TNSFileManager.Wrap(TNSFileManager.OCClass.defaultManager);
URL:=nsFile.URLForUbiquityContainerIdentifier(nil); if (URL <> nil) then begin URL:=URL.URLByAppendingPathComponent(StrToNSStr('Documents')); Result := UTF8ToString(URL.path.UTF8String); if (not nsFile.fileExistsAtPath(URL.path,nil)) then begin mlog.info('create new iCloud directory: '+result); if (nsFile.createDirectoryAtURL(URL,true,nil,nil)) then mlog.info('Created new iCloud directory '+result) else mlog.info('Can´t creat new iCloud directory '+result); end; end else Result := ''; |
AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10
Hallo,
Idee Nr. 2 nicht umsetzen, da wirst du vermutlich an Google scheitern, es sei denn deine App ist ein Dateimanager. Wenn du Dateien in den öffentlichen Downloads Ordner bekommen willst dürfte m.W. bei Scoped Storage kein Weg um den ACTION_CREATE_DOCUMENT oder ACTION_OPEN_DOCUMENT Intent führen. Grundsätzliche Beispiele dafür gibt's glaube ich in der EN Delphipraxis. Mehr Lesestoff dazu gibt's hier: https://developer.android.com/traini...ocuments-files Grüße TurboMagic |
AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10
Danke, funktioniert soweit. Hier der Vollständigkeithalber noch der Code, wie ich jetzt Dateien in den SharedDownload-Folder bekomme (den Read-Code habe ich in einem anderen Issue schon gepostet):
Aufruf der Dateiauswahl-Funktion:
Delphi-Quellcode:
Schreiben der Datei (hier Kopie einer vorhandenen Datei):
var Intent: JIntent;
fileToWrite:=appPathRef+'docs'+System.IOUtils.TPath.DirectorySeparatorChar+'icTrainer.txt'; TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessageTCXWrite); Intent:=TJIntent.create; Intent.setAction(TJIntent.JavaClass.ACTION_CREATE_DOCUMENT); Intent.setType(StringToJString('*/*')); Intent.putExtra(TJIntent.JavaClass.EXTRA_TITLE,StringToJString(TFileUtils.removePath(fileToWrite))); Intent.addCategory(TJIntent.JavaClass.CATEGORY_OPENABLE); MainActivity.startActivityForResult(Intent,0);
Delphi-Quellcode:
procedure TicTrainerF.HandleActivityMessageTCXWrite(const Sender: TObject; const M: TMessage);
var Data:JIntent; uri:String; jos: JOutputStream; Arr: TBytes; len:Integer; b: TJavaArray<Byte>; begin if (M is TMessageResultNotification) then begin TMessageManager.DefaultManager.Unsubscribe(TMessageResultNotification, HandleActivityMessageTCXWrite); data:=TMessageReceivedNotification(M).Value; uri:=JStringToString(Data.getData.toString); Arr := TEncoding.UTF8.GetBytes(TStringUtils.listToString(TFileUtils.readFileUTF8(fileToWrite),TStringUtils.getLineFeed())); len := Length(Arr); b:=TJavaArray<Byte>.Create(len); if (len>0) then Move(Arr[0],b.Data^,len); jos:=TAndroidHelper.Context.getContentResolver.openOutputStream(Data.getData); jos.write(b); jos.close; end; end; |
AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10
Delphi-Quellcode:
... + TPath.DirectorySeparatorChar + ...
Delphi-Quellcode:
:zwinker:
TPath.Combine(..., ...)
Und auch falls bereits ein abschließender Separator im ersten String ist, dann wird das abgefangen (nicht doppelt drin). Ebenso, wenn der zweite String ein absoluter Pfad ist (kein Relativer), dann wird der Erste natürlich weggelassen. |
AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10
Hallo,
wo finde ich denn die Klasse TFileUtils und TStringUtils in Delphi 11.3? Gruß Manfred |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz