• Failed to find configured root that contains


    这个主要问题是在android系统下7.0

    拍照时,Android提供FileProvider类来供应用之间共享数据。

    出现这个问题多为xml文件 path 类型和代码中调用的类型不同导致的

    以下为多种各种xml文件和对应path类的关系

    <files-path path="" name="camera_photos" />

    该方式提供在应用的内部存储区的文件/子目录的文件。它对应Context.getFilesDir返回的路径:eg:"/data/data/com.jph.simple/files"。

    <cache-path name="name" path="path" />

    该方式提供在应用的内部存储区的缓存子目录的文件。它对应getCacheDir返回的路径:eg:“/data/data/com.jph.simple/cache”;

    <external-path name="name" path="path" />

    该方式提供在外部存储区域根目录下的文件。它对应Environment.getExternalStorageDirectory返回的路径:eg:"/storage/emulated/0";

    <external-files-path name="name" path="path" />
    该方式提供在应用的外部存储区根目录的下的文件。它对应Context#getExternalFilesDir(String) Context.getExternalFilesDir(null)返回的路径。eg:"/storage/emulated/0/Android/data/com.jph.simple/files"。
    <external-cache-path name="name" path="path" />

    该方式提供在应用的外部缓存区根目录的文件。它对应Context.getExternalCacheDir()返回的路径。eg:"/storage/emulated/0/Android/data/com.jph.simple/cache"

    这些就是FileProvider提供的所有支持的path类型

    如果使用外部SD卡

    则需要设置

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <paths>
            <root-path path="" name="camera_photos" />
        </paths>
    </resources>

    添加root-path节点

    这样FileProvider就可以使用外部储存卡了

    以上解决了Android高版本file使用的问题,下面还有个问题,就是多个文件夹需求,如何去使用FileProvider

    如,我拍照需要文件夹,下载的文件也需要新的文件

    那么其实只需要声明一个FileProvider,然后再xml里再声明一个paths即可

    如下为file_paths.xml文件

    <paths>
        <external-path name="takpic_img_path" path="Camera"/>
    
        <external-path name="apk_file_path" path="APL_DOWNLOAD"/>
    </paths>
    FileProvider正常声明为同一个即可
         <provider
                android:name="android.support.v4.content.FileProvider"
                android:authorities="com.xxxx.fileprovider"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    tools:replace="android:resource"
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/file_paths" />
            </provider>

     这样在调用的时候

     uri=FileProvider.getUriForFile(mContext.getApplicationContext(),"com.xxxx.fileprovider",apkFile);

    这样去获取Uri即可,多个地方只需要传不同的file,但是去使用同一个 authorities

  • 相关阅读:
    JAVA中handleEvent和action的区别
    Hessian的使用以及理解
    Java基础中的RMI介绍与使用
    Callable与Runable接口 submit与execute区别
    XXL-JOB原理--定时任务框架简介(一)
    11.并发包阻塞队列之LinkedBlockingQueue
    并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
    正确实现用spring扫描自定义的annotation
    自贡进入“刷脸卡”时代 人脸识别支付“黑科技”现身自流井老街
    谷歌最新研究:量子计算机能在8小时内破解2048位RSA加密
  • 原文地址:https://www.cnblogs.com/fengfenghuifei/p/10725603.html
Copyright © 2020-2023  润新知