AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10.4

Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10.4

Ein Thema von philipp.hofmann · begonnen am 9. Sep 2020 · letzter Beitrag vom 14. Sep 2023
Antwort Antwort
Seite 2 von 3     12 3   
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
866 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10

  Alt 11. Sep 2020, 11:52
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)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.251 Beiträge
 
Delphi 12 Athens
 
#12

AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10

  Alt 11. Sep 2020, 12:19
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (11. Sep 2020 um 12:22 Uhr)
  Mit Zitat antworten Zitat
PiBi7

Registriert seit: 15. Okt 2019
4 Beiträge
 
#13

AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10

  Alt 12. Apr 2021, 13:56
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
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.856 Beiträge
 
Delphi 12 Athens
 
#14

AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10

  Alt 12. Apr 2021, 21:34
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.251 Beiträge
 
Delphi 12 Athens
 
#15

AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10

  Alt 13. Apr 2021, 10:33
Ansonsten geht ja die eine funktionierende Lieblingslösung der Hersteller über ihre Cloud.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
866 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10

  Alt 6. Mai 2021, 16:26
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 := '';
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.856 Beiträge
 
Delphi 12 Athens
 
#17

AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10

  Alt 6. Mai 2021, 16:41
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
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
866 Beiträge
 
Delphi 10.4 Sydney
 
#18

AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10

  Alt 7. Mai 2021, 16:19
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:
    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);
Schreiben der Datei (hier Kopie einer vorhandenen Datei):
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;

Geändert von philipp.hofmann ( 8. Mai 2021 um 13:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.251 Beiträge
 
Delphi 12 Athens
 
#19

AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10

  Alt 7. Mai 2021, 16:26
... + TPath.DirectorySeparatorChar + ...

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Mai 2021 um 16:29 Uhr)
  Mit Zitat antworten Zitat
mstratmann

Registriert seit: 9. Dez 2010
3 Beiträge
 
#20

AW: Android: Zugriff auf externe Dateien (nicht Shareable media files) seit Delphi 10

  Alt 14. Sep 2023, 19:10
Hallo,

wo finde ich denn die Klasse TFileUtils und TStringUtils in Delphi 11.3?

Gruß
Manfred
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 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