Android将多个文件从SD卡附加到电子邮件

Sou*_*hak 4 email android attachment

如何在android中的电子邮件中附加多个文件?多个文件附加到意图是否需要任何权限?我正在尝试使用putParcelableArrayListExtra(Intent.EXTRA_STREAM,ArrayList uriList)方法,但仍然怀疑Uri类是否<?扩展Parcelable>或不.我无法将任何文件附加到电子邮件中.

这是我的代码::

Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
sendIntent.setType("plain/text");
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"soubhabpathak2010@gmail.com"});
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:"));
Run Code Online (Sandbox Code Playgroud)

和getUriListForImages()这个方法被定义为吼叫-----


private ArrayList<Uri> getUriListForImages()  {

    ArrayList<Uri> uriList = 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++)
        {
            String file = "file://" + imageDirectoryPath + fileList[i];
            Log.d(TAG, "File name for Uri :: " + file);
            Uri uriFile = Uri.parse(file);
            uriList.add(uriFile);
            Log.d(TAG, "Image File for Uri :: " +(file));

        }
    }
    return uriList;
}
Run Code Online (Sandbox Code Playgroud)

要,主题和正文的电子邮件快到了,我在SD卡中的文件夹意外图像(我使用2.1 API 7级),但没有被安装,即使有也logcat.Arraylist不例外也行(指长度确定和文件名也可以).任何人都可以帮我解决这个问题吗?

Sou*_*hak 6

经过1天的工作,我终于可以将多个图像文件从\ sdcard\accident\folder附加到电子邮件客户端.为了附加多个文件,我必须将图像添加到ContentResolver,后者负责图库图像提供程序.这是完整的代码---

Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
sendIntent.setType("plain/text");
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"soubhabpathak2010@gmail.com"});
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:"));
Run Code Online (Sandbox Code Playgroud)

所以Code的第一部分没有变化 - 但是更改是在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;
            } 

Run Code Online (Sandbox Code Playgroud)

这工作正常,我能够将多个图像文件附加到模拟器默认电子邮件客户端并成功发送它们.