Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Android Intent für verschiedene Dateitypen? (https://www.delphipraxis.net/196373-android-intent-fuer-verschiedene-dateitypen.html)

sko1 16. Mai 2018 11:56

Android Intent für verschiedene Dateitypen?
 
Hallo,

um verschiedene Dateitypen auf dem Handy anzeigen zu können, brauche ich verschiedene Intents:

Delphi-Quellcode:
  if (fileext = 'JPG') or (fileext = 'JPEG') then
    Intent.setDataAndType(StrToJURI(filename), StringToJString('image/jpeg'))
  else if fileext = 'PDF' then
    Intent.setDataAndType(StrToJURI(filename),
      StringToJString('application/pdf'))
  else if fileext = 'TXT' then
    Intent.setDataAndType(StrToJURI(filename), StringToJString('text/plain'))
... also mal "image/...", mal "application/..." oder "text/..."

Gibt es da was "allgemeingültiges" was gleich die richtigen DataTypes des Intents einstellt?

Käme bei obigem Code vielleicht noch mp3 dazu, müsste ich einen weiteren if-Zweig mit "audio/..." aufmachen :-(

Das muss doch besser / einfacher / allgemeingültiger gehen?

Ciao
Stefan

himitsu 16. Mai 2018 12:24

AW: Android Intent für verschiedene Dateitypen?
 
Viele IFs sind sowieso schon ein Designfehler.

Entweder du machst dir ein/zwei Arrays.
Delphi-Quellcode:
const
  FileExt:    array[0..7] of string = ('', '.txt', '.html', '.css', '.js', '.gif', '.jpeg', '.png');
  ContentType: array[0..7] of string = ('application/octet-stream', 'text/plain', 'text/html', 'text/css', 'text/js', 'image/gif', 'image/jpeg', 'image/png');
Man könnte das auch in eine Datei schreiben und diese als Ressource in die EXE linken

Oder du fragst Andere, welche bereits solch eine Liste haben
z.B. TIdMimeTable (IdGlobalProtocols.pas), TWebFileExtensions (WebFileDispatcher.pas) oder UrlMon.pas

Eventuell kann man auch Android nach sowas fragen.

bra 16. Mai 2018 12:55

AW: Android Intent für verschiedene Dateitypen?
 
Delphi-Quellcode:
function GetMimeType(AFilename: String): JString;
var
  jstr: JString;
begin
  // MIME-Type auslesen
  result := StringToJString('application/pdf'); // Standard
  jstr := TJMimeTypeMap.JavaClass.getFileExtensionFromUrl(StringToJString(AFilename));
  if jstr <> nil then begin
    jstr := TJMimeTypeMap.JavaClass.getSingleton.getMimeTypeFromExtension(jstr);
    if jstr <> nil then
      result := jstr;
  end;
end;

TiGü 16. Mai 2018 12:56

AW: Android Intent für verschiedene Dateitypen?
 
Im neuen 10.2.3 würde es sogar eine Klasse dafür geben (System.Net.Mime.TMimeTypes -> hier dann die Default-Eigenschaft nehmen, um eine Instanz zu erhalten).

sko1 16. Mai 2018 15:55

AW: Android Intent für verschiedene Dateitypen?
 
Ich kann leider (oder Gott sei Dank?) nur auf Berlin 10.1 Update 2 zurückgreifen :-)

Den Tip von bra schau ich mir an.

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf