2011-05-13 55 views
6

在Android消息传递中,当点击附件时,打开内容提供商列表,如相机,图库,音频,视频等。如何打开按钮点击相同的列表? 像这样: enter image description here如何打开媒体附件列表?

回答

3

你想要什么其实是一个有点复杂:需要调用这样的方法在你的活动

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

来显示对话框,然后这是选择适配器的实际执行。

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

这实际上是消息对话框中是如何做的(上面的类是从MMS应用),你可以去https://android.googlesource.com/platform/packages/apps/Mms/+/master/src/com/android/mms/ui和看ComposeMessageActivity的showAddAttachmentDialog方法和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

它只会打开图片库。 – Sandy

2

我认为你可以使用这个

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

感谢您的回复,我已经尝试过,但它并没有给我像上面的结果(我的意思是只有媒体内容)。 – Sandy