2011-07-11 63 views
4

如何在Android中的電子郵件中附加多個文件? 是否有任何權限需要多個文件附件的意圖? 我想用putParcelableArrayListExtra(Intent.EXTRA_STREAM,ArrayList uriList)方法,但仍然懷疑是否Uri類是<?是否擴展了Parcelable >。 我無法附加任何文件到電子郵件。Android將多個文件從SD卡連接到電子郵件

這是我的代碼::

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() { 

    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; 
} 

,主題和電子郵件的身體來了我在SD卡的事故文件夾中有圖像(我正在使用2.1 API級別7),但沒有附加任何內容,即使在logcat.Arraylist中也沒有例外也沒問題(意味着長度正常,文件名也可以)。任何人都可以幫我解決這個問題嗎?

回答

6

在1天之後終於工作,我能夠從\ SD卡\事故附加多個圖像文件\文件夾中的電子郵件客戶端。爲了附加多個文件,我必須將這些圖像添加到負責圖庫圖像提供者的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

EXTRA_STREAM這樣說:

A content: URI holding a stream of data associated with the Intent, used with 
ACTION_SEND to supply the data being sent. 
Constant Value: "android.intent.extra.STREAM" 

你不可錯過的file URI的一套:它會簡單地忽略結果(如你正在觀察)。

編輯:從頭開始。我錯了。這是處理多個文件的標準Android電子郵件客戶端中的代碼塊。

if (Intent.ACTION_SEND_MULTIPLE.equals(mAction) 
       && intent.hasExtra(Intent.EXTRA_STREAM)) { 
      ArrayList<Parcelable> list = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); 
      if (list != null) { 
       for (Parcelable parcelable : list) { 
        Uri uri = (Uri) parcelable; 
        if (uri != null) { 
         Attachment attachment = loadAttachmentInfo(uri); 
         if (MimeUtility.mimeTypeMatches(attachment.mMimeType, 
           Email.ACCEPTABLE_ATTACHMENT_SEND_INTENT_TYPES)) { 
          addAttachment(attachment); 
         } 
        } 
       } 
      } 
     } 

嘗試這樣做:

private ArrayList<Parcelable> getUriListForImages() { 
    ArrayList<Parcelable> uriList = new ArrayList<Parcelable>(); 

    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; 
} 
+0

那麼我怎樣才能附加多個文件?有沒有其他方法可以做到這一點? –

相關問題