2011-05-13 15 views
6

Nella messaggistica Android, quando si fa clic su Allega apri l'elenco di provider di contenuti come Fotocamera, Galleria, Audio, Video ecc.. Come aprire lo stesso elenco sul pulsante di scatto? Ti piace questa: enter image description hereCome aprire degli allegati dei media?

risposta

3

Ciò che si vuole è in realtà un po 'complessa: è necessario chiamare un metodo come questo nella vostra attività

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

per mostrare la finestra di dialogo, e quindi questo è l'effettiva attuazione della scheda di selezione.

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

Questo è in realtà come la finestra di messaggistica lo fa (la classe di cui sopra è da App MMS) e si può vedere tutti i dettagli scabrosi andando a https://android.googlesource.com/platform/packages/apps/Mms/+/master/src/com/android/mms/ui e guardando il metodo showAddAttachmentDialog del ComposeMessageActivity e 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

Si aprirà unica galleria di immagini. – Sandy

2

Penso che si possa utilizzare questo

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

Grazie per la risposta, ho provato questo, ma non mi sta dando il risultato come sopra (intendo solo il contenuto multimediale). – Sandy

Problemi correlati