2014-04-28 2 views
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.

+0

Я думаю, что вы должны проверить размер Юрис после каждого цикла и dependens на использование намерения поставить дополнительный. –

+0

На самом деле, моя проблема заключается в создании этого массива, я пытался использовать JArrayList, но он поднимает Violaion Access, когда я добавляю первый Uri в JArrayList, я буду дополнять вопрос. – wordermorr

+1

'sl: = JArrayList.Create;'? – whosrdaddy

ответ

3

просто сделал это ...

procedure TfrmSendMail.CreateEmail(const Recipient, Subject, Content, 
    Attachment, Attachment2: string); 
var 
    Intent: JIntent; 
    Uri: Jnet_Uri; 
    Uri2: Jnet_Uri; 
    AttachmentFile: JFile; 
    AttachmentFile2: JFile; 
    Uris: 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)); 

    AttachmentFile := SharedActivity.getExternalFilesDir 
    (StringToJString(Attachment)); 
    AttachmentFile2 := SharedActivity.getExternalFilesDir 
    (StringToJString(Attachment2)); 

    Uri := TJnet_Uri.JavaClass.fromFile(AttachmentFile); 
    Uri2 := TJnet_Uri.JavaClass.fromFile(AttachmentFile2); 

    Uris:= TJArrayList.Create; 
    Uris.add(0,Uri); 
    Uris.add(1,Uri2); 

    Intent.putParcelableArrayListExtra(TJIntent.JavaClass.EXTRA_STREAM, Uris); 

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

    SharedActivity.startActivity(Intent); 
end;