How can I serve files from the SECONDARY external storage using the FileProvider
?
The current implementation of the FileProvider
handles on
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.