如何通过android中的意图选择几种类型的文件?

Shi*_*pal 7 android file android-intent

我将选定的文件上传到服务器,但我知道我想restrick用户只选择文档文件(.doc,.pdf等)和图像文件.

现在我的代码适用于所有文件,它提取uri的所有文件,所以请告诉我如何限制用户只选择特定类型的文件.

这是我选择任何文件的代码.

Intent i=new Intent();
i.setType("*/*");
i.setAction(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(i, "abc"),requestCode);
Run Code Online (Sandbox Code Playgroud)

Mad*_*bar 19

使用| like 分隔多个MIME类型

i.setType("image/*|application/pdf|audio/*");
Run Code Online (Sandbox Code Playgroud)

或创建一个MIME类型数组,如

String[] mimetypes = {"image/*", "application/*|text/*"};
Run Code Online (Sandbox Code Playgroud)

并传递给它

i.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
Run Code Online (Sandbox Code Playgroud)


Abh*_*arg 7

根据上面的答案和类似的线程,我开发了一个工作解决方案。我正在分享代码片段,因此它会很容易使用。

如何使用意图过滤或选择特定文件类型的文件。

代码

public static Intent getCustomFileChooserIntent(String ...types){
            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
            // Filter to only show results that can be "opened"
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            intent.setType("*/*");
            intent.putExtra(Intent.EXTRA_MIME_TYPES, types);
            return intent;
        }
Run Code Online (Sandbox Code Playgroud)

示例文件类型常量

        public static final String DOC = "application/msword";
        public static final String DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
        public static final String IMAGE = "image/*";
        public static final String AUDIO = "audio/*";
        public static final String TEXT = "text/*";
        public static final String PDF = "application/pdf";
        public static final String XLS = "application/vnd.ms-excel";
Run Code Online (Sandbox Code Playgroud)

用法

  // i passed string values, you can pass a array of string too.
    Intent intent = getCustomFileChooserIntent(DOC, PDF, IMAGE);

    startActivityForResult(intent, 101);
Run Code Online (Sandbox Code Playgroud)