Android 添加两个(多个)FileProvider节点(解决头像拍照和第三方SDK(例如融云)拍照的FileProvider冲突问题)

news/2024/7/4 20:32:45

在android7.0以后,修改了对私有存储的限制,导致在获取资源的时候,不能通过Uri.fromFile(...)来获取Uri了;但是在写入数据的时候可以通过Uri.fromFile(...)来获取Uri。Android官方给出的方法是通过FileProvider来解决这一问题。

        但是当此项目中用到了其它包含拍照功能的第三方SDK时,就会导致FileProvider冲突问题,因为第三方SDK为了适配android7.0已经添加了FileProver节点。

        解决方法有两种:

        第一种:创建一个继承自FileProvider的类,并在AndroidManifest中添加provider节点;

        第二种:将第三方SDK中的路径配置copy到provider_paths.xml文件中;

      第一种:

        1.创建ImageFileProver继承FileProvider;

package com.yuyh.library.imgsel;

import android.support.v4.content.FileProvider;

public class ImageFileProvider extends FileProvider {
}

2.在AndroidManifest清单文件的application中添加provider节点;

        <provider
            android:name=".ImageFileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
        </provider>

3.在res下创建xml文件夹,并在文件夹中创建provider_paths.xml文件

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

第二种:

同样是在res下创建xml文件夹,并在文件夹中创建provider_paths.xml文件,然后将第三方SDK中的路径配置copy到provider_paths.xml文件中;

总结:

以上就是通过FileProvider节点解决拍照冲突的两种方式,如果项目中的头像拍照使用的是开源库,那么推荐使用第一种方式,在以后的新项目中可以直接使用开源库,避免了重复的工作。

---------------------------------------------------------------------------------------------------------------------------

早计划,早准备,早完成。 欢迎关注!交流!Star!

GitHub:https://github.com/wangyang0313

微信公众号:一个灵活的胖子MrWang

简书:https://www.jianshu.com/u/e5e733d79b96  


http://www.niftyadmin.cn/n/2108700.html

相关文章

SELECT 语句中的 for update (以及 lock in share mode

SELECT 语句中的 for update &#xff08;以及 lock in share mode&#xff09; 的用法试验。这个语句限制在事务表的其他连接上进行UPDATE或者DELETE操作。连接1命名为A。连接2命名为B。有几个先决条件&#xff1a;1、当autocommit 系统变量值为off 或者为0 的时候起作用。2、…

Android 在Application中跳转到Activity的异常处理

项目需求&#xff1a;在Application中判断用户是否登录&#xff0c;如果登录则跳转到主页&#xff0c;如果未登录则跳转到登录页面。 一般通过Intent跳转到Activity的方法&#xff1a; Intent intent new Intent(this, MainActivity.class); startActivity(intent); 在Appl…

工作笔记 7.21-7.25

1. cstring 在 unicode 下转 char* 仅仅须要在后面加一个 ""; 就能够了&#xff01;&#xff01;&#xff01;&#xff01;2. f5 和执行文件夹是不一样的。3. 有问题查看 log 日志。并多打一些 log 出来&#xff0c;方便解决这个问题。4. Inno 加文件要写在iss中。。…

实训C++语言设计——稀疏矩阵SparseMatrix

平台&#xff1a;VC 2005 测试通过&#xff01;.vcproj这是使用应用程序向导生成的 VC 项目的主项目文件。 它包含生成该文件的 Visual C 的版本信息&#xff0c;以及有关使用应用程序向导选择的平台、配置和项目功能的信息。StdAfx.h, StdAfx.cpp这些文件用于生成名为 twod.pc…

基础篇——Handler异步回调机制

写代码的四点&#xff1a; 1.明确需求。要做什么&#xff1f; 2.分析思路。要怎么做&#xff1f;&#xff08;1,2,3……&#xff09; 3.确定步骤。每一个思路要用到哪些语句、方法和对象。 4.代码实现。用具体的语言代码将思路实现出来。 学习新技术的四点&#xff1a; 1.该技…

AMP:Google 新技术能让网页瞬间加载完毕

作为一家活在 Web 世界的公司&#xff0c;Google 对提升网页性能一直是不遗余力。今天&#xff0c;为了让用户能够更快地浏览网页&#xff0c;Google 联合 8 家科技公司以及近 30 家新闻机构一起发布了一个名为移动页面加速&#xff08;Accelerated Mobile Pages&#xff09;的…

HTML5中类jQuery选择器querySelector的高级使用 document.querySelectorAll.bind(document);

基本用法 querySelector 该方法返回满足条件的单个元素。按照深度优先和先序遍历的原则使用参数提供的CSS选择器在DOM进行查找&#xff0c;返回第一个满足条件的元素。 ----> querySelector得到一个DOM var element document.querySelector(#container);//返回id为conta…

不能正常关机的处理办法

问&#xff1a;Win98不能正常关机是什么原因&#xff0c;如何处理&#xff1f;安装WinXP后不能正常关机&#xff0c;按下电源开关也不能关机而又重新启动系统&#xff0c;是什么原因&#xff1f;答&#xff1a;首先谈谈Windows系统自动关机的条件。在Win98及更高版本的系统中都…