FileProvider and secondary external storage

后端 未结 5 1937
慢半拍i
慢半拍i 2021-01-02 19:17

How can I serve files from the SECONDARY external storage using the FileProvider?

The current implementation of the FileProvider handles on

5条回答
  •  情话喂你
    2021-01-02 19:40

    FileProvider not support secondary storage because of the code below:

    Code from support:support-core-utils:26.1.0 FileProvider

                } else if (TAG_EXTERNAL_FILES.equals(tag)) {
                    File[] externalFilesDirs = ContextCompat.getExternalFilesDirs(context, null);
                    if (externalFilesDirs.length > 0) {
                        target = externalFilesDirs[0];// Code here, That's why!!!
                    }
                } else if (TAG_EXTERNAL_CACHE.equals(tag)) {
    

    However, there is a special TAG in FileProvider : root-path which is not covered in official reference.

                if (TAG_ROOT_PATH.equals(tag)) {
                    target = DEVICE_ROOT;// DEVICE_ROOT = new File("/");
                } else if (TAG_FILES_PATH.equals(tag)) {
    

    So, root-path matches all the path.

    Just type this code in your FileProvider xml, then FileProvider can handle File in secondary storage.

    
    

    Be aware, it may leak your directory structure.

提交回复
热议问题