Android中添加两个(多个)FileProvider节点问题

来源:互联网 发布:java 打印byte数组 编辑:程序博客网 时间:2024/06/18 17:27

我们知道在android7.0,修改了对私有存储的限制,导致在获取资源的时候,不能通过Uri.fromFile(..)来获取uri了,但是在写入数据的时候是可以通过Uri.fromFile(..)来获取uri的,android 官网给出的解决办法是通过FileProvider来解决这一问题,我们需要在AndroidManifest.xml 配制provider节点。

<provider    android:name="android.support.v4.content.FileProvider"    android:authorities="${applicationId}.fileProvider"    android:exported="false"    android:grantUriPermissions="true"    tools:replace="android:authorities">    <meta-data        android:name="android.support.FILE_PROVIDER_PATHS"        android:resource="@xml/provider_paths"        tools:replace="android:resource"/></provider>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

其中,provider_paths.xml如下所示:

<?xml version="1.0" encoding="utf-8"?><paths xmlns:android="http://schemas.android.com/apk/res/android">    <!-- /storage/emulated/0/Download/${applicationId}/.beta/apk-->    <external-path name="beta_external_path" path="Download/"/>    <!--/storage/emulated/0/Android/data/${applicationId}/files/apk/-->    <external-path name="beta_external_files_path" path="Android/data/"/></paths>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

但是此时我们项目中可能会用到其他一些第三方sdk有用到拍照功能的话,他也为了适配android7.0也添加了这个节点,此时有些人可能就不知道如何下手了,其实很简单我们只要重写一个类 继承自FileProvider,然后就按上述方法在添加一个节点就可以了。例如:

<provider    android:name="com.stay4it.content.MyFileProvider"    android:authorities="${applicationId}.provider"    android:grantUriPermissions="true"    android:exported="false">    <meta-data        android:name="android.support.FILE_PROVIDER_PATHS"        android:resource="@xml/cust_file_paths" /></provider>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

如果你不想自定义FileProvider,那么还有一种方法,那就是把第三方sdk中的路径配置copy到provider_paths.xml即可。

如下所示:

<?xml version="1.0" encoding="utf-8"?><paths xmlns:android="http://schemas.android.com/apk/res/android">    <!-- /storage/emulated/0/Download/${applicationId}/.beta/apk-->    <external-path name="beta_external_path" path="Download/"/>    <!--/storage/emulated/0/Android/data/${applicationId}/files/apk/-->    <external-path name="beta_external_files_path" path="Android/data/"/>    <external-path name="external_storage_root" path="."/>    <files-path name="files" path="."/></paths>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

顺便推荐个开源库:
图片选择器,支持直接拍照并裁剪,单选裁剪,图片多选,裁剪比例设置等

转自:http://blog.csdn.net/jdsjlzx/article/details/68487013

阅读全文
0 0
原创粉丝点击