2010-12-29 12 views
28

私はIntent .ACTION_SENDを使ってデフォルトのメールクライアントを取得しています。それはうまく動作しますが、今はメールに複数のファイルを添付する必要があります。複数のファイルをandroidのメールクライアントに添付する方法

email.putExtra(android.content.Intent.EXTRA_STREAM,...)最後にuriが付加されます。

複数のファイルを添付することはできますか?私はこれがIntent.ACTION_SEND_MULTIPLEを使って行うことができると思います。ここに私が試みているコードはあります:

String uri=getScreenShot(); 

Intent email = new Intent(android.content.Intent.ACTION_SEND); 
      email.setType("application/octet-stream"); 
      email.putExtra(Intent.EXTRA_STREAM, Uri.parse(uri)); 
      email.putExtra(android.content.Intent.EXTRA_STREAM, Uri.parse("file:"+csvpath)); 
      alert.dismiss(); 
      ctx.startActivity(Intent.createChooser(email, "Send mail...")); 

ありがとうございます。

答えて

47

ArrayList<Uri> uris = new ArrayList<Uri>(); 

ei.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); 
startActivityForResult(Intent.createChooser(ei, "Sending multiple attachment"), 12345); 

・ホープそれは助ける。

+0

完了してありがとうございます。アップアップされた –

+0

gmailから複数の添付ファイルやスパムのようなテキストを送信すると、Googleアカウントが無効になる危険性があることに注意してください。これを試すときに開発アカウントを使用してみてください。 –

+0

初めての作業です。私は2つのメールを同時に送信すると1回だけ動作します。 –

9

putParcelableArrayListExtraの方法 インテントを以下に示すように使用できます。代わりに のこのよう使用:email.putExtra(Intent.EXTRA_STREAM, Uri.parse(uri));を、あなたが使用することができます ArrayList下図のように:

final Intent ei = new Intent(Intent.ACTION_SEND_MULTIPLE); 
ei.setType("plain/text"); 
ei.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); 
ei.putExtra(Intent.EXTRA_SUBJECT, "That one works"); 

その後、ファイルURIを追加します:作品

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); 
} 
email.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); 
+4

うん働いた私はこれをしなかったが、それはGmailのクライアントを開くにNullPointerExceptionができます。デフォルトの電子メールクライアントを開くと添付ファイルが表示されません。 –

0

最終的に私は\ sdcard \ accident \ folderから複数の画像ファイルをメールクライアントに添付することができました。複数のファイルを添付するために、私はGalleryResolverを担当するContentResolverにイメージを追加しなければなりませんでした。 ここでは完全なコードがある---

Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); 
sendIntent.setType("plain/text"); 
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); 
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Accident Capture"); 
sendIntent.putExtra(Intent.EXTRA_TEXT, emailBody); 

ArrayList<Uri> uriList = getUriListForImages(); 
sendIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList); 
Log.d(TAG, "Size of the ArrayList :: " +uriList.size()); 
FormHolderActivity.this.startActivity(Intent.createChooser(sendIntent, "Email:")); 

だからコードの最初のセクションには変化はありません - しかし、変更はgetUriListForImagesで以下のようになる()メソッド---である



    private ArrayList<Uri> getUriListForImages() throws Exception { 
       ArrayList<Uri> myList = new ArrayList<Uri>(); 
       String imageDirectoryPath = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/accident/"; 
       File imageDirectory = new File(imageDirectoryPath); 
       String[] fileList = imageDirectory.list(); 
       if(fileList.length != 0) { 
        for(int i=0; i<fileList.length; i++) 
        { 
         try 
         { 
          ContentValues values = new ContentValues(7); 
          values.put(Images.Media.TITLE, fileList[i]); 
          values.put(Images.Media.DISPLAY_NAME, fileList[i]); 
          values.put(Images.Media.DATE_TAKEN, new Date().getTime()); 
          values.put(Images.Media.MIME_TYPE, "image/jpeg"); 
          values.put(Images.ImageColumns.BUCKET_ID, imageDirectoryPath.hashCode()); 
          values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileList[i]); 
          values.put("_data", imageDirectoryPath + fileList[i]); 
          ContentResolver contentResolver = getApplicationContext().getContentResolver(); 
          Uri uri = contentResolver.insert(Images.Media.EXTERNAL_CONTENT_URI, values); 
          myList.add(uri); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 
       } 
       return myList; 
      } 

これは正常に動作しています。エミュレータのデフォルトの電子メールクライアントに複数のイメージファイルを添付して正常に送信できます。ここで

1

は、仕事をする機能です:)

public static void sendEmailMulipleFiles(Context context, String toAddress, String subject, String body, ArrayList<String> attachmentPath) throws Exception { 
    try { 
     Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.putExtra(Intent.EXTRA_EMAIL, new String[] { toAddress }); 
     intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
     intent.putExtra(Intent.EXTRA_TEXT, body); 
     intent.setType("message/rfc822"); 
     PackageManager pm = context.getPackageManager(); 
     List<ResolveInfo> matches = pm.queryIntentActivities(intent, 0); 
     ResolveInfo best = null; 
     for (final ResolveInfo info : matches) { 
      if (info.activityInfo.packageName.contains(".gm.") || info.activityInfo.name.toLowerCase().contains("gmail")) 
       best = info; 
     } 
     ArrayList<Uri> uri = new ArrayList<Uri>(); 
     for (int i = 0; i < attachmentPath.size(); i++) { 
      File file = new File(attachmentPath.get(i)); 
      uri.add(Uri.fromFile(file)); 
     } 

     intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uri); 


     if (best != null) 
      intent.setClassName(best.activityInfo.packageName, best.activityInfo.name); 

     context.startActivity(Intent.createChooser(intent, "Choose an email application...")); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
     throw ex; 
    } 
} 
2

が私のために

Intent emailIntent=new Intent(Intent.ACTION_SEND_MULTIPLE, Uri.parse("mailto:"+ clientEmail)); 
       emailIntent.putExtra(Intent.EXTRA_SUBJECT,"working-tutor-form From App"); 
       emailIntent.setType("text/plain"); 
       Uri uri1 = Uri.parse("file://" + URI1); 
       Uri uri2 = Uri.parse("file://" + URI2); 
       Uri uri3 = Uri.parse("file://" + URI3); 
       ArrayList<Uri> arrayList=new ArrayList<Uri>(); 
       arrayList.add(uri1); 
       arrayList.add(uri2); 
       arrayList.add(uri3); 
       emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,arrayList); 

       emailIntent.putExtra(Intent.EXTRA_TEXT,body); 
       startActivity(Intent.createChooser(emailIntent,"Send Via...")); 
+0

これは私のために働いた...ありがとう – Sujeeth

関連する問題