1
Я нашел этот код для отправки нескольких вложений с помощью Gmail для Android приложения:Как отправить несколько вложений с помощью Intent
public static void email(Context context, String emailTo, String emailCC,
String subject, String emailText, List<String> filePaths)
{
//need to "send multiple" to get more than one attachment
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
emailIntent.setType("text/plain");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
new String[]{emailTo});
emailIntent.putExtra(android.content.Intent.EXTRA_CC,
new String[]{emailCC});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, emailText);
//has to be an ArrayList
ArrayList<Uri> uris = new ArrayList<Uri>();
//convert from paths to Android friendly Parcelable Uri's
for (String file : filePaths)
{
File fileIn = new File(file);
Uri u = Uri.fromFile(fileIn);
uris.add(u);
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
context.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
}
Но есть проблема, для одной привязанности я уже сделал это, но я не могу выяснить, как преобразовать эту часть в Delphi. Здесь вы можете добавить два или более файла в приложении.
//has to be an ArrayList
ArrayList<Uri> uris = new ArrayList<Uri>();
//convert from paths to Android friendly Parcelable Uri's
for (String file : filePaths)
{
File fileIn = new File(file);
Uri u = Uri.fromFile(fileIn);
uris.add(u);
В этом случае я попытался это:
procedure TfrmSendMail.CreateEmail(const Recipient, Subject, Content,
Attachment, Attachment2: string);
var
Intent: JIntent;
Uri: Jnet_Uri;
Uri2: Jnet_Uri;
AttachmentFile: JFile;
AttachmentFile2: JFile;
sl: JArrayList;
begin
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_SEND_MULTIPLE);
Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, StringToJString(Recipient));
Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(Subject));
Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(Content));
// ShowMessage('incluindo arquivos');
AttachmentFile := SharedActivity.getExternalFilesDir
(StringToJString(Attachment));
AttachmentFile2 := SharedActivity.getExternalFilesDir
(StringToJString(Attachment2));
// ShowMessage('criando URIs');
Uri := TJnet_Uri.JavaClass.fromFile(AttachmentFile);
Uri2 := TJnet_Uri.JavaClass.fromFile(AttachmentFile2);
// ShowMessage('vai dar rolo aqui');
sl.add(0,Uri);
ShowMessage('e aqui?');
sl.add(1,Uri2);
// ShowMessage('nem chega aqui');
Intent.putParcelableArrayListExtra(TJIntent.JavaClass.EXTRA_STREAM, sl);
// Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM,
// TJParcelable.Wrap((Uri as ILocalObject).GetObjectID));
Intent.setType(StringToJString('vnd.android.cursor.dir/email'));
SharedActivity.startActivity(Intent);
end;
Но приложение вызывает нарушение прав доступа при добавлении в первую строку JArrayValue.
Я думаю, что вы должны проверить размер Юрис после каждого цикла и dependens на использование намерения поставить дополнительный. –
На самом деле, моя проблема заключается в создании этого массива, я пытался использовать JArrayList, но он поднимает Violaion Access, когда я добавляю первый Uri в JArrayList, я буду дополнять вопрос. – wordermorr
'sl: = JArrayList.Create;'? – whosrdaddy