首页 > 解决方案 > 如何使用默认的 Android 电子邮件应用程序发送带附件的电子邮件 - Delphi RIO

问题描述

你好 StackOverflow 的团队,

使用 Delphi Rio,我有一个 Android 应用程序,我想发送一封带有附加 zip 文件的电子邮件。

关于以下链接,我可以使用 Delphi Tokyo(设备 6.0、8.0 和 8.1)执行此操作,但不适用于 Rio:该应用程序在 8.0 + 8.1 设备关闭时没有任何消息错误。它适用于我的 6.0 设备。

如何使用默认的 Android 电子邮件应用程序发送带附件的电子邮件 - Delphi XE7

在调用 CreateEmail 过程之前已创建 Zip 文件。

此链接stackoverflow.com/a/53605468/3164070确实帮助了我,但现在我有 2 个目标地址:

如何删除错误的地址?

这是我的程序:

procedure CreateEmailTest(const _Recipient, _Subject, _Content, _Attachment: string);
var LIntent: JIntent;
  LAuthority: JString;
  LUri: Jnet_Uri;
  JRecipient: TJavaObjectArray<JString>;
begin
  LAuthority := StringToJString(JStringToString(TAndroidHelper.Context.getApplicationContext.getPackageName) + '.fileprovider');
  LUri := TJFileProvider.JavaClass.getUriForFile(TAndroidHelper.Context, LAuthority, TJFile.JavaClass.init(StringToJString(_Attachment)));

  LIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_SEND);

  JRecipient          := TJavaObjectArray<JString>.Create(1);
  JRecipient.Items[0] := StringToJString(_Recipient);
  LIntent.removeExtra(StringToJString(_Attachment));//do not remove wrong email adress
  LIntent.removeExtra(TJIntent.JavaClass.EXTRA_EMAIL) ;//do not remove wrong email adress
  LIntent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, JRecipient);
  LIntent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(_Subject));
  LIntent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(_Content));
  LIntent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((LUri as ILocalObject).GetObjectID)); // ajout de la pièce jointe
  LIntent.setDataAndType(LUri, StringToJString('vnd.android.cursor.dir/email'));

  TAndroidHelper.Activity.startActivity(LIntent);
end;

问候,

乐福卡布罗

标签: androiddelphi

解决方案


推荐阅读