如何为多种类型的文件(pdf,办公室,图像,文本)设置android意图并返回路径?

nap*_*ror 5 android android-intent

我是意图新手,我试图弄清楚如何使用解析(URI)和/或setType()来打开正确的应用程序类型,并允许我选择的东西.

我想从启动我的应用程序的意图,将允许用户挑选多种类型的文件(一.PDF,.DOCX,.XLSX,.PPTX,.DOC,.JPG,.PNG,.TXT,.LOG,等).我需要返回的活动是该文件的完整路径.

现在我正在使用setType("*/*")我在这里找到的选择器,但这会在Android中自动打开一些文档选择器.我有文件管理器和其他应用程序,并想知道标准setType是什么或MIME类型.提前致谢.

另外,如果已经回答,我道歉.我已经在线查看了,但我认为我正在寻找错误的东西,因为我得到的结果只是想要其中一个或不返回路径的意图.

我的适用代码如下:(注意:这是在片段内完成的)

static final int PICK_FILE_REQUEST = 101;

private String pathToFile = "";

public String selectFile()  {
    String path = "";
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT), chooser = null;
    intent.setType("*/*");
    chooser = Intent.createChooser(intent, "Find file to Print");
    startActivityForResult(chooser, PICK_FILE_REQUEST);
    path = pathToFile;
    return path;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)   {
    if(requestCode == PICK_FILE_REQUEST){
        if(resultCode == Activity.RESULT_OK){
            pathToFile = data.getDataString();
            String temp = data.getStringExtra("path");
            Log.d("Files Fragment: ", pathToFile);
            Log.d("Files Fragment: ", temp);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jul*_*rty 8

我有一个类似的问题,花了至少15分钟搜索一个如何实际编码支持的例子 EXTRA_MIME_TYPES

值得庆幸的是,我找到了一个例子http://android-er.blogspot.co.uk/2015/09/open-multi-files-using.html,试了一下,测试了它,它似乎适用于我的用例这是能够找到并加载两个相似但不完全相同的mime类型(对于任何奇怪的原因,如果我通过USB将其复制到设备,同一个csv文件有一个mime类型,如果我从Google下载它,则是另一个驾驶).这是我的代码片段.据推测,你可以在Strings数组中添加更多mime类型以满足您的需求.

public void findReviewsToLoad() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    String [] mimeTypes = {"text/csv", "text/comma-separated-values"};
    intent.setType("*/*");
    intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
    startActivityForResult(intent, FIND_FILE_REQUEST_CODE);
}
Run Code Online (Sandbox Code Playgroud)

  • 似乎与 `("image/*", "application/pdf")` 完美配合。谢谢 ! (4认同)

bji*_*ang 6

你可以用Intent.ACTION_OPEN_DOCUMENT,

每个文档被表示为内容:// URI由DocumentsProvider,它可以被打开,与openFileDescriptor(URI,String)将流的支持,或用于查询DocumentsContract.Document元数据.

所有选定的文档都将返回到调用应用程序,并具有可持久的读写权限授予.如果你想保持访问跨设备重新启动的文件,你需要明确采取使用takePersistableUriPermission(URI,INT)的持久化权限.

调用者必须通过setType(String)指示可接受的文档MIME类型.例如,要选择照片,请使用image/*.如果可以接受多个不相交的MIME类型,请在EXTRA_MIME_TYPES和setType(String)中定义它们*/*.

有关详细信息,请参阅此处.

  • 请注意,这仅适用于API级别19+. (2认同)
  • @SagarPatel:在 API 级别 19、IIRC 之前不支持多种 MIME 类型。在您的 UI 中,您需要询问用户要检索的 MIME 类型,然后将其与“ACTION_GET_CONTENT”一起使用。或者,使用通配符 MIME 类型,然后验证用户选择的内容的实际 MIME 类型。 (2认同)