Programming

인 텐트를 사용하는 Android 다중 이메일 첨부 파일

procodes 2020. 8. 22. 13:03
반응형

인 텐트를 사용하는 Android 다중 이메일 첨부 파일


나는 인 텐트를 사용하여 첨부 파일 (이미지 파일, 오디오 파일 등)이있는 이메일을 보내는 Android 프로그램에서 ACTION_SEND. 이 프로그램은 이메일에 단일 첨부 파일이있을 때 작동합니다. 내가 사용하는 Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri)메일에 지정된 이미지 파일을 첨부하고 잘 작동되고, 메일은 Gmail을 통해 전달 될 수있다. 그러나 Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri)여러 번 호출하여 동일한 메일에 여러 이미지를 첨부하려고 하면 작동하지 않습니다. 이메일에 첨부 파일이 표시되지 않습니다.

이메일 첨부 파일에 대한 SDK 문서 및 Android 프로그래밍 사용자 그룹을 검색했지만 관련 정보를 찾을 수 없습니다. 그러나 ACTION_SEND_MULTIPLE내 요구 사항을 충족 할 수있는 또 다른 의도 상수 (API 레벨 4부터 사용 가능) 가 있음을 발견했습니다 . SDK 문서에 따르면 단순히 다른 사람에게 여러 데이터를 전달한다고 명시 ACTION_SEND하고 데이터가 여러 개라는 점을 제외하면. 하지만 여전히이 명령의 올바른 사용법을 알아낼 수 없었습니다. 을 사용하여 의도를 선언 ACTION_SEND_MULTIPLE한 다음 putExtra(EXTRA_STREAM, uri)여러 번 호출 하여 여러 이미지를 첨부하려고했지만 이전과 동일한 잘못된 결과를 얻었으며 첨부 파일이 이메일에 표시되지 않았습니다.

누구든지 ACTION_SEND_MULTIPLE여러 전자 메일 첨부 파일을 사용해 보았 습니까?


다음은 여러 첨부 파일을 포함하는 emailIntent를 만드는 데 필요한 코드입니다.

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(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..."));
}

ACTION_SEND_MULTIPLE 행동이어야한다

그리고 emailIntent.setType("text/plain");

뒤에 :

ArrayList<Uri> uris = new ArrayList<Uri>();
String[] filePaths = new String[] {"sdcard/sample.png", "sdcard/sample.png"};
for (String file : filePaths)
{
    File fileIn = new File(file);
    Uri u = Uri.fromFile(fileIn);
    uris.add(u);
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(emailIntent);

이것은 나를 위해 작동합니다.


이것은 오래된 스레드이지만 Google 검색에서 맨 위에 표시되므로 완료하기 위해 작은 힌트를 추가하고 싶기 때문에 난처했습니다.

메일 활동을 위해 첨부 파일을 읽을 수 있도록해야합니다. 그렇지 않으면 첨부되지 않습니다. 그래서 당신은 어딘가에 전화해야

fileIn.setReadable(true, false)

여기에서 좋은 예를 찾았습니다 http://www.blackmoonit.com/2010/02/filebrowser-send-receive-intents/

당신은 사용해야합니다

final Intent aIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
aIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,theUris);
aIntent.setType(theOverallMIMEtype);

여러 첨부 파일의 경우 PutParcelableArrayListExtra(Intent.ExtraStream, uris)uris 변수가있는 List<IParcelable>().경우 사용 예 다음과 같습니다.

var email = new Intent(Intent.ActionSendMultiple);
    email.SetType("text/plain");
    email.PutExtra(Intent.ExtraEmail, new string[]{emailTo});
    email.PutExtra(Intent.ExtraCc, new string[]{emailCC});

    var uris = new List<IParcelable>();
    filePaths.ForEach(file=> {
        var fileIn = new File(file);
        var uri = Android.Net.Uri.FromFile(fileIn);
        uris.Add(uri);
    });

    email.PutParcelableArrayListExtra(Intent.ExtraStream, uris);

    context.StartActivity(Intent.CreateChooser(email, "Send mail..."));

도움이 되었기를 바랍니다 ;)

참고 URL : https://stackoverflow.com/questions/2264622/android-multiple-email-attachments-using-intent

반응형