AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

SendMail unter Android mit XE8

Ein Thema von Rollo62 · begonnen am 25. Aug 2015
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.103 Beiträge
 
Delphi 12 Athens
 
#1

SendMail unter Android mit XE8

  Alt 25. Aug 2015, 16:42
Hallo zusammen,

weil im Web viele falsche Lösungen für XE8 kursieren (meistens ältere unter XE5), wie z.B.:
http://blong.com/Articles/DelphiXE6A...#EmailActivity

PROBLEM
Code:
 uses
  Androidapi.JNIBridge, ...

...

procedure CreateEmail(const Recipient, Subject, Content: string); overload;
var
  Intent: JIntent;
begin
  Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_SEND);
  Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, StringToJString(Recipient));
  Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(Subject));
  Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(Content));
  // Intent.setType(StringToJString('plain/text'));
  Intent.setType(StringToJString('message/rfc822'));
  // LaunchActivity(Intent);
  LaunchActivity(TJIntent.JavaClass.createChooser(Intent, StrToJCharSequence('Which email app?')));
end;
habe ich hier mal einen funktionierenden Code unter XE8 gepostet:
http://stackoverflow.com/questions/1...ail-delphi-xe5

MEINE AKTUELLE LÖSUNG:
Code:
uses
    Androidapi.JNI.JavaTypes
  , Androidapi.JNIBridge
  , Androidapi.JNI.GraphicsContentViewText
  , AndroidApi.Helpers
  , FMX.Helpers.Android
  ;

...
procedure CreateEmail(const sRecp, sSubj, sBody : string);
var
  Intent: JIntent;
  aDest : TJavaObjectArray<JString>;
begin

    Intent := TJIntent.Create;

    aDest := TJavaObjectArray<JString>.Create(1);
    aDest.Items[0] := StringToJString( sRecp );

    Intent.setAction(TJIntent.JavaClass.ACTION_Send);
    Intent.setFlags( TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
    Intent.putExtra( TJIntent.JavaClass.EXTRA_EMAIL,  aDest );
    Intent.putExtra( TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(sSubj));
    intent.putExtra( TJIntent.JavaClass.EXTRA_TEXT,   StringToJString(sBody));

//    Intent.setType(StringToJString('vnd.android.cursor.dir/email'));
    Intent.setType(StringToJString('message/rfc822'));

    SharedActivity.startActivity(TJIntent.JavaClass.createChooser(Intent,
                                 StrToJCharSequence('Which email app ?')));

end;
Der entscheidende Unterschied ist:

1. Fall String wird übergeben --> email Adresse wird NICHT der EmailApp übergeben,
Zitat:
Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, StringToJString(Recipient));
2. Fall StringArray wird übergeben --> email Adresse wird KORREKT der EmailApp übergeben
Zitat:
Recipients := TJavaObjectArray<JString>.Create(1);
Recipients.Items[0] := StringToJString(Recipient);
Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, Recipients);

Dann gibt es aber noch verschiedene Philosophien welcher MIME Type der richtige ist:
Code:
 
Intent.setType(StringToJString('plain/text'));     // Alle möglichen Apps kommen im Chooser
Intent.setType(StringToJString('vnd.android.cursor.dir/email')); // Dise Option gibt es auch, läöuft aber auch nicht ideal
Intent.setType(StringToJString('message/rfc822')); // Dies ist die empfohlene Version, hier sollten nur Mailfähige Apps angezeigt werden
Aber egal was ich nehme, es kommen immer auch Nicht-MailApps im Chooser hoch, so wie TotalCommander.
Kann natürlich sein das sich alle diese Apps für Email registriert haben, aber vielleicht gibt es
ja noch Tricks und Optimierungen um das wirklich nur an echte Mail apps zu leiten.


Rollo
  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 09:39 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