美文网首页Android Zone
Android FileProvider冲突处理方法

Android FileProvider冲突处理方法

作者: 翻译不了的声响 | 来源:发表于2020-01-15 18:08 被阅读0次

    项目里有多个module应用FileProvider时,编译器在编译项目合并 Manifest文件时候就抛出了provider冲突问题。定义FileProvider时,用的都是v4包提供的FileProvider类来读写文件,所以会导致冲突。

    那么多个FileProvider造成的冲突该怎么解决,下面介绍两种处理方法以供参考。

    代码示例:

    <application>
       ...
    <!-- 其他 -->
     <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
     </provider>
    <!-- 广点通 -->
     <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/gdt_file_path" />
      </provider>
     ...
    </application>
    

    处理方法:
    ① 合并xml文件
    1)把两个FileProvider的配置引用文件file_paths.xmlgdt_file_path.xml合并成一个new_file_paths.xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
       <!-- 广点通 -->
        <external-path
            name="gdt_sdk_download_path"
            path="GDTDOWNLOAD" />
        <external-cache-path
            name="gdt_sdk_download_path1"
            path="com_qq_e_download" />
        <cache-path
            name="gdt_sdk_download_path2"
            path="com_qq_e_download" />
       <!-- 其他 -->
        <external-files-path 
            name="external_files" path="."/>
    </paths>
    

    2)在 Manifest文件中重新配置 FileProvider;

    <application>
       ...
    <!-- 合并后 -->
     <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/new_file_paths" />
     </provider>
     ...
    </application>
    

    ② 重写FileProvider
    1)重写v4包提供的 FileProvider类:

    public class GDTFileProvider extends FileProvider{
    }
    

    2)在 Manifest文件中重新配置 FileProvider;

    <application>
        ...
     <!-- 其他 -->
      <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
         <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
      </provider>
     <!-- 广点通 -->
      <provider
         android:name=".utils.GDTFileProvider"//自定义的FileProvider的路径
         android:authorities="${applicationId}.fileProvider"
         android:exported="false"
         android:grantUriPermissions="true"
         tools:replace="name,authorities,exported,grantUriPermissions">
         <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/gdt_file_path"
            tools:replace="name,resource" />
       </provider>
       ...
    </application>
    

    相关文章

      网友评论

        本文标题:Android FileProvider冲突处理方法

        本文链接:https://www.haomeiwen.com/subject/qdimnctx.html