2011-07-11 4 views
4

Comment attacher plusieurs fichiers dans le courrier électronique dans android? Existe-t-il une autorisation requise pour la fixation de plusieurs fichiers à une intention? J'essaie avec la méthode putParcelableArrayListExtra (Intent.EXTRA_STREAM, ArrayList uriList) mais je doute encore que la classe Uri soit <? extends Parcelable > ou non. Je ne peux pas joindre de fichier à un courrier électronique.Android attachant plusieurs fichiers de la carte SD à l'email

C'est mon code ::

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:")); 

et getUriListForImages() cette méthode est définie comme ci-dessous -----


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

A, le sujet et le corps de l'e-mail est à venir et j'ai des images dans le dossier des accidents dans sdcard (j'utilise 2.1 API niveau 7) mais rien ne s'y attache même il n'y a pas non plus d'exception dans logcat.Arraylist est aussi ok (signifie longueur OK et le nom des fichiers sont ok aussi). Quelqu'un peut m'aider à résoudre ce problème?

Répondre

6

Après 1 journée de travail finalement je suis en mesure de joindre plusieurs fichiers d'image de \ sdcard \ accident dossier \ à un client de messagerie. Pour joindre plusieurs fichiers, j'ai dû ajouter les images à ContentResolver qui est responsable du fournisseur d'images de galerie. Voici le code complet ---

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:")); 

Il n'y a donc pas de changement dans la première section du Code - Méthode Mais le changement est dans getUriListForImages() qui est la suivante ---



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

Cela fonctionne très bien et je suis capable d'attacher plusieurs fichiers image au client de messagerie par défaut de l'émulateur et de les envoyer avec succès.

1

EXTRA_STREAM dit ceci:

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" 

Vous ne pouvez pas passer un ensemble de file URIs: il ignore simplement les résultats (que vous observez).

EDIT: rayez cela. J'avais tort. C'est le morceau de code dans le client de messagerie Android standard qui gère plusieurs fichiers.

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

Essayez de faire ceci:

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

Ensuite, comment puis-je joindre plusieurs fichiers? Y a-t-il un autre moyen de le faire? –