【问题标题】:Failed to find configured root that contains未能找到包含的已配置根
【发布时间】:2017-03-19 20:52:13
【问题描述】:

很抱歉问了一个过于重复的问题,但 stackoverflow 上的任何答案都对我很有帮助。

我想使用FileProvider 将文件访问到自定义文件夹。我在清单中的声明,在<application> 标签内:

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="my.package.name.provider"
    android:exported="false"            
    android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths" />
</provider>

那么,在provider_paths.xml

<paths>
    <cache-path name="my_videos" path="MyFolderName/"/>
</paths>

(但我试过了,而不是 cache-pathfiles-pathexternal-pathexternal-files-path

我的文件的创建是:

public static Uri getUriFromFile(File file, Context context) {
    int flags = Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
    Uri uri = FileProvider.getUriForFile(context, context.getPackageName() + ".provider", file);
    context.grantUriPermission(context.getPackageName(), uri, flags);
    return uri;
}

public static File getMyDirectory() {
    File root = new File(context.getCacheDir(), "MyFolderName");
    if(root.mkdir()) Log.e(Consts.TAG, "Directory created");
    return root;
}

...

File outputFile = new File(getMyDirectory(), filename + ".mp4");
videoUri = getUriFromFile(outputFile, this);

(而且,我尝试了context.getFilesDir()Environment.getExternalStorageDirectory()context.getExternalFilesDir(""),而不是context.getCacheDir()

最后,我想找回我的文件:

String pathToFile = "/my_videos/filename.mp4";
Uri file = getUriFromFile(new File(pathToFile), context);

尝试了路径:

"/MyFolderName/filename.mp4"
"content://my.package.name.provider/my_videos/filename.mp4"
"content://my.package.name.provider/MyFolderName/filename.mp4"

所有这些尝试都让我遇到了这个错误:

Failed to find configured root that contains /my_videos/filename.mp4

知道我做错了什么吗?提前致谢!

【问题讨论】:

    标签: android android-fileprovider


    【解决方案1】:

    我想找回我的文件:

    这些都不是文件的有效路径。

    您已经有代码可以为您提供文件的有效路径:

    File outputFile = new File(getMyDirectory(), filename + ".mp4");
    

    所以,请使用您已经编写的代码。

    【讨论】:

    • 我没想过再次使用同一行。事实是第三方库向我返回了 pathToFile 你在我的问题中看到的,我想“为什么再次使用那条线,我已经有了一条路径!”,但路径不是那么正确。仅使用路径的文件名部分与您的行一起工作。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多