2011-05-13 2 views
6

Dans la messagerie Android, lorsque vous cliquez sur le joindre, ouvrez la liste du fournisseur de contenu comme Appareil photo, Galerie, Audio, Vidéo etc. Comment ouvrir la même liste sur le bouton clic? Comme ceci: enter image description hereComment ouvrir la liste des pièces jointes?

Répondre

3

Ce que vous voulez est en fait un peu complexe: vous avez besoin d'appeler une méthode comme celui-ci dans votre activité

private void showAddAttachmentDialog() { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setIcon(R.drawable.ic_dialog_attach); 
     builder.setTitle(R.string.add_attachment); 

     AttachmentTypeSelectorAdapter mAttachmentTypeSelectorAdapter = new AttachmentTypeSelectorAdapter(this, AttachmentTypeSelectorAdapter.MODE_WITH_SLIDESHOW); 
     } 
     builder.setAdapter(mAttachmentTypeSelectorAdapter, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       addAttachment(mAttachmentTypeSelectorAdapter.buttonToCommand(which), replace); 
       dialog.dismiss(); 
      } 
     }); 

     builder.show(); 
    } 

pour afficher la boîte de dialogue, puis il s'agit de l'implémentation réelle de l'adaptateur de sélection.

package com.android.mms.ui; 

import com.android.mms.MmsConfig; 
import com.android.mms.R; 

import android.content.Context; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* An adapter to store icons and strings for attachment type list. 
*/ 
public class AttachmentTypeSelectorAdapter extends IconListAdapter { 
    public final static int MODE_WITH_SLIDESHOW = 0; 
    public final static int MODE_WITHOUT_SLIDESHOW = 1; 

    public final static int ADD_IMAGE    = 0; 
    public final static int TAKE_PICTURE   = 1; 
    public final static int ADD_VIDEO    = 2; 
    public final static int RECORD_VIDEO   = 3; 
    public final static int ADD_SOUND    = 4; 
    public final static int RECORD_SOUND   = 5; 
    public final static int ADD_SLIDESHOW   = 6; 

    public AttachmentTypeSelectorAdapter(Context context, int mode) { 
     super(context, getData(mode, context)); 
    } 

    public int buttonToCommand(int whichButton) { 
     AttachmentListItem item = (AttachmentListItem)getItem(whichButton); 
     return item.getCommand(); 
    } 

    protected static List<IconListItem> getData(int mode, Context context) { 
     List<IconListItem> data = new ArrayList<IconListItem>(7); 
     addItem(data, context.getString(R.string.attach_image), 
       R.drawable.ic_launcher_gallery, ADD_IMAGE); 

     addItem(data, context.getString(R.string.attach_take_photo), 
       R.drawable.ic_launcher_camera, TAKE_PICTURE); 

     addItem(data, context.getString(R.string.attach_video), 
       R.drawable.ic_launcher_video_player, ADD_VIDEO); 

     addItem(data, context.getString(R.string.attach_record_video), 
       R.drawable.ic_launcher_camera_record, RECORD_VIDEO); 

     if (MmsConfig.getAllowAttachAudio()) { 
      addItem(data, context.getString(R.string.attach_sound), 
        R.drawable.ic_launcher_musicplayer_2, ADD_SOUND); 
     } 

     addItem(data, context.getString(R.string.attach_record_sound), 
       R.drawable.ic_launcher_record_audio, RECORD_SOUND); 

     if (mode == MODE_WITH_SLIDESHOW) { 
      addItem(data, context.getString(R.string.attach_slideshow), 
        R.drawable.ic_launcher_slideshow_add_sms, ADD_SLIDESHOW); 
     } 

     return data; 
    } 

    protected static void addItem(List<IconListItem> data, String title, 
      int resource, int command) { 
     AttachmentListItem temp = new AttachmentListItem(title, resource, command); 
     data.add(temp); 
    } 

    public static class AttachmentListItem extends IconListAdapter.IconListItem { 
     private int mCommand; 

     public AttachmentListItem(String title, int resource, int command) { 
      super(title, resource); 

      mCommand = command; 
     } 

     public int getCommand() { 
      return mCommand; 
     } 
    } 
} 

Ceci est en fait comment la boîte de dialogue de messagerie le fait (la classe ci-dessus est de l'application MMS) et vous pouvez voir tous les détails gores en allant https://android.googlesource.com/platform/packages/apps/Mms/+/master/src/com/android/mms/ui et regardant méthode showAddAttachmentDialog du ComposeMessageActivity et AttachmentTypeSelectorAdapter.

0
Intent intent = new Intent(); 
//intent.setType("image/\*"); 
intent.setType("\*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE); 
+0

Il ouvrira la galerie d'images seulement. – Sandy

2

Je pense que vous pouvez utiliser cette

Intent intent = new Intent(); 
intent.setType("*/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(Intent.createChooser(intent,"Select Picture"), 0); 
+0

Merci pour la réponse, j'ai essayé ceci, mais il ne me donne pas le résultat comme ci-dessus (je veux dire seulement le contenu multimédia). – Sandy

Questions connexes