2011-05-13 13 views
6

En los mensajes de Android, cuando haga clic en adjuntarlo, abra la lista de proveedores de contenido como Cámara, Galería, Audio, Video, etc.. ¿Cómo abrir la misma lista al hacer clic en el botón? De esta manera: enter image description here¿Cómo abrir la lista de archivos adjuntos?

Respuesta

3

Lo que queremos es en realidad un poco compleja: hay que llamar a un método como este en su actividad

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

para mostrar el cuadro de diálogo, y esta es la implementación real del adaptador de selección.

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

Ésta es realmente la forma en el cuadro de diálogo de mensajes lo hace (la clase de arriba es de la aplicación MMS) y se puede ver todos los detalles morbosos yendo a https://android.googlesource.com/platform/packages/apps/Mms/+/master/src/com/android/mms/ui y mirando a showAddAttachmentDialog método del ComposeMessageActivity y la 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

Se abrirá la galería de imágenes solamente. – Sandy

2

Creo que se puede utilizar este

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

Gracias por su respuesta, lo he intentado, pero no me está dando el resultado anterior (me refiero solo al contenido multimedia). – Sandy

Cuestiones relacionadas