ACTION_GET_CONTENT仅限文件,无图像或视频

时间:2015-03-12 19:35:52

标签: java android file

好的,我用这个

开始我的功能
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType(mimeType);
    intent.addCategory(Intent.CATEGORY_OPENABLE);

for Samsung

        chooserIntent = Intent.createChooser(sIntent, context.getString(R.string.choosefilefrom));
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {intent});

用于其他设备

        chooserIntent = Intent.createChooser(intent, context.getString(R.string.choosefilefrom));

mimeType是允许使用的类型,此时此*/*。 但如何排除图像和视频只显示文件选择器中的文件? 我有3个意图,一个用于图像,一个用于视频,一个用于文件。

2 个答案:

答案 0 :(得分:1)

您目前正在指定 / ,这是"所有"。

据我所知,mime类型中没有排除机制。

你必须指定你想要允许的特定mime类型 - 除了这两种mime类型之外,没有办法指定"除了#34;。

答案 1 :(得分:0)

如果您看看https://www.iana.org/assignments/media-types/media-types.xhtml

那么您可能可以假定主要的mime类型:

  • 应用程序/ *(很多文件类型,以下主要类型除外,但包括诸如application/ogg之类的音频)
  • 音频/ *
  • 字体/ *
  • 图片/ *
  • 消息/ *
  • 型号/ *
  • 多部分/ *
  • 文本/ *
  • 视频/ *

因此,假设您希望选择AudioVideoImages之外的其他任何东西

然后执行以下操作:

String[] mimetypes = {
    "application/*",
    //"audio/*",
    "font/*",
    //"image/*",
    "message/*",
    "model/*",
    "multipart/*",
    "text/*",
    //"video/*"
};

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); //Important part here
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, 10000);

然后当然要处理返回的URI:

public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 10000)
    {
        if (data != null)
        {
            if (data.getClipData() != null)
            {
                // multiple files selected
                for (int i = 0; i < data.getClipData().getItemCount(); i++)
                {
                    android.net.Uri uri = data.getClipData().getItemAt(i).getUri();
                }
            }
            else
            {
                // single file selected
                android.net.Uri uri = data.getData();
            }
        }
    }
}