如何打开媒体附件列表?附件、媒体、列表

2023-09-06 00:28:02 作者:葑鈊鎻嗳

在Android的消息,当点击它附加打开内容提供商的名单例如相机,画廊,音频,视频等。如何打开按钮点击同一个列表? 喜欢这个 :

In Android messaging, when click on attach it open the list of content provider like Camera, Gallery, Audio, Video etc. How to open the same list on button click? Like this :

推荐答案

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

What you want is actually a little complex: you need to call a method like this in your Activity

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

要显示对话框,然后这是选择适配器的实际实现。

to show the dialog, and then this is the actual implementation of the selection adapter.

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应用程序),你可以通过将看到所有的血淋淋的细节http://android.git.kernel.org/?p=platform/packages/apps/Mms.git;a=tree;f=src/com/android/mms/ui;h=03d65959a8d75676e2a4c4de4b35147c95b61768;hb=HEAD看着那ComposeMessageActivity的 showAddAttachmentDialog 方法和 AttachmentTypeSelectorAdapter

This is actually how the messaging dialog does it (the class above is from the MMS app) and you can see all the gory details by going to http://android.git.kernel.org/?p=platform/packages/apps/Mms.git;a=tree;f=src/com/android/mms/ui;h=03d65959a8d75676e2a4c4de4b35147c95b61768;hb=HEAD and looking at the ComposeMessageActivity's showAddAttachmentDialog method and the AttachmentTypeSelectorAdapter.