Reputation: 109
I'm trying send a email with multiple attachments, but, in Android SDK most recent, was changed the method to send files, and most existing tutorials is about the older SDK version ...
I obtained send the email with only one attachment, but not with multiple...
I try using the same method of 1 attachment but using it twice. Not works, the delphi catch only the last Intent.putExtra
.
What I'm making wrong ?
(Utilizing only the Android Plataform)
procedure TF_inicio.Rec_exportClick(Sender: TObject);
var
sfilename: string;
AttachmentFile1: JFile;
AttachmentFile2: JFile;
AttachmentFile3: JFile;
Intent: JIntent;
AddressesTo, Anexos: TJavaObjectArray<JString>;
LList: TStringDynArray;
I: Integer;
LSearchOption: TSearchOption;
// AddressesCC, AddressesBCC: TJavaObjectArray<JString>;
begin
LSearchOption := TSearchOption.soTopDirectoryOnly;
LList := TDirectory.GetFiles(path, '*.csv', LSearchOption);
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_SENDTO);
Intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('mailto:')));
AddressesTo := TJavaObjectArray<JString>.Create(1); // Enviar para:
AddressesTo.Items[0] := StringToJString('[email protected]');
Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, AddressesTo);
Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT,
StringToJString(F_inicio.placa_veiculo + ' - ' +
FormatDateTime('dd/mm/yyyy hh:MM', NOW)));
Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT,
StringToJString('Email automático' + sLineBreak + ''));
if Length(LList) = 1 then
AttachmentFile1 := TJFile.JavaClass.init(StringToJString(LList[1]));
if Length(LList) = 2 then
AttachmentFile2 := TJFile.JavaClass.init(StringToJString(LList[2]));
if Length(LList) = 3 then
AttachmentFile3 := TJFile.JavaClass.init(StringToJString(LList[3]));
if Length(LList) >= 1 then
begin
AttachmentFile1 := TJFile.JavaClass.init(StringToJString(LList[1]));
Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM,
TJParcelable.Wrap((TJnet_Uri.JavaClass.fromFile(AttachmentFile1)
as ILocalObject).GetObjectID));
end;
if Length(LList) >= 2 then
begin
AttachmentFile2 := TJFile.JavaClass.init(StringToJString(LList[2]));
Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM,
TJParcelable.Wrap((TJnet_Uri.JavaClass.fromFile(AttachmentFile2)
as ILocalObject).GetObjectID));
end;
if Length(LList) >= 3 then
begin
AttachmentFile3 := TJFile.JavaClass.init(StringToJString(LList[3]));
Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM,
TJParcelable.Wrap((TJnet_Uri.JavaClass.fromFile(AttachmentFile3)
as ILocalObject).GetObjectID));
end;
SharedActivity.startActivity(Intent);
end;
Upvotes: 0
Views: 905
Reputation: 598449
Just use a simple loop to add the attachments, all those redundant if blocks are unnecessary:
procedure TF_inicio.Rec_exportClick(Sender: TObject);
var
sfilename: string;
AttachmentFile: JFile;
Intent: JIntent;
AddressesTo, Anexos: TJavaObjectArray<JString>;
LList: TStringDynArray;
I: Integer;
LSearchOption: TSearchOption;
// AddressesCC, AddressesBCC: TJavaObjectArray<JString>;
LUri: Jnet_URI;
begin
LSearchOption := TSearchOption.soTopDirectoryOnly;
LList := TDirectory.GetFiles(path, '*.csv', LSearchOption);
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_SENDTO);
Intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('mailto:')));
AddressesTo := TJavaObjectArray<JString>.Create(1); // Enviar para:
AddressesTo.Items[0] := StringToJString('[email protected]');
Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, AddressesTo);
Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT,
StringToJString(F_inicio.placa_veiculo + ' - ' +
FormatDateTime('dd/mm/yyyy hh:MM', NOW)));
Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT,
StringToJString('Email automático' + sLineBreak + ''));
for I := 0 to Length(LList)-1 do
begin
AttachmentFile := TJFile.JavaClass.init(StringToJString(LList[I]));
LUri := TJnet_Uri.JavaClass.fromFile(AttachmentFile);
Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((LUri as ILocalObject).GetObjectID));
end;
SharedActivity.startActivity(Intent);
end;
Or, use a single call to Intent.putExtra(Parsable[])
or Intent.putParcelableArrayListExtra()
to add an array of URIs, instead of calling Intent.putExtra(Parsable)
for each individual URI:
procedure TF_inicio.Rec_exportClick(Sender: TObject);
var
LList: TStringDynArray;
LSearchOption: TSearchOption;
Intent: JIntent;
I: Integer;
AttachmentFile: JFile;
LUri: Jnet_Uri;
LURIs: TJavaObjectArray<JParcelable>;
begin
LSearchOption := TSearchOption.soTopDirectoryOnly;
LList := TDirectory.GetFiles(path, '*.csv', LSearchOption);
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_SEND_MULTIPLE);
Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
Intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('mailto:')));
Intent.setType(StringToJString('vnd.android.cursor.dir/email'));
Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, StringToJString('[email protected]'));
Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(F_inicio.placa_veiculo + ' - ' + FormatDateTime('dd/mm/yyyy hh:MM', NOW)));
Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString('Email automático' + sLineBreak + ''));
if LList <> nil then
begin
LURIs := TJavaObjectArray<JParcelable>.Create(Length(LList));
for I := 0 to Length(LList)-1 do
begin
AttachmentFile := TJFile.JavaClass.init(StringToJString(LList[I]));
LUri := TJnet_Uri.JavaClass.fromFile(AttachmentFile);
LURIs[I] := TJParcelable.Wrap((LUri as ILocalObject).GetObjectID);
end;
Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, LURIs);
end;
SharedActivity.startActivity(Intent);
end;
procedure TF_inicio.Rec_exportClick(Sender: TObject);
var
LList: TStringDynArray;
LSearchOption: TSearchOption;
Intent: JIntent;
I: Integer;
AttachmentFile: JFile;
LUri: Jnet_Uri;
LURIs: JArrayList;
begin
LSearchOption := TSearchOption.soTopDirectoryOnly;
LList := TDirectory.GetFiles(path, '*.csv', LSearchOption);
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_SEND_MULTIPLE);
Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
Intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('mailto:')));
Intent.setType(StringToJString('vnd.android.cursor.dir/email'));
Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, StringToJString('[email protected]'));
Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(F_inicio.placa_veiculo + ' - ' + FormatDateTime('dd/mm/yyyy hh:MM', NOW)));
Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString('Email automático' + sLineBreak + ''));
if LList <> nil then
begin
LURIs := TJArrayList.Create;
for I := 0 to Length(LList)-1 do
begin
AttachmentFile := TJFile.JavaClass.init(StringToJString(LList[I]));
LUri := TJnet_Uri.JavaClass.fromFile(AttachmentFile);
LURIs.add(LUri);
end;
Intent.putParcelableArrayListExtra(TJIntent.JavaClass.EXTRA_STREAM, LURIs);
end;
SharedActivity.startActivity(Intent);
end;
Upvotes: 1