相关疑难解决方法(0)

可以在FileProvider中使用多个权限吗?

背景

我维护一个库,其核心功能包括以编程方式捕获的屏幕截图与外部电子邮件应用程序共享.

我用a FileProvider来完成这个,这意味着我的库的清单包含一个<provider>标签:

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.bugshaker.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />
</provider>
Run Code Online (Sandbox Code Playgroud)

filepaths.xml 定义如下:

<paths>
    <files-path path="bug-reports/" name="bug-reports" />
</paths>
Run Code Online (Sandbox Code Playgroud)

我的库的消费者有一个应用程序,它本身使用a FileProvider来共享文件.我的期望是,如果使用应用程序使用以下清单<provider>标记,则应该可以允许两个提供程序共享文件:

<provider
    android:authorities="${applicationId}.fileprovider;${applicationId}.bugshaker.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true"
    android:name="android.support.v4.content.FileProvider"
    tools:replace="android:authorities">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths"
        tools:replace="android:resource" />
</provider>
Run Code Online (Sandbox Code Playgroud)

这个清单条目:

  • 指定两个Provider权限${applicationId}.fileprovider(用于应用程序文件共享)和${applicationId}.bugshaker.fileprovider(用于库文件共享);
  • 引用更新filepaths.xml,其中包含应用程序生成的文件和库生成的文件的单独目录定义:
<paths>
    <external-path
        name="redacted"
        path="" />
    <files-path
        name="bug-reports"
        path="bug-reports/" />
</paths>
Run Code Online (Sandbox Code Playgroud)

构建应用程序后,我们已确认生成的清单已使用这些更新的值替换了正确的节点.

但是,当使用此配置的应用程序组装(成功)并运行时,我们会看到启动时崩溃:

E: FATAL EXCEPTION: main
   Process: com.stkent.bugshakertest, PID: 11636
   java.lang.RuntimeException: Unable to …
Run Code Online (Sandbox Code Playgroud)

android android-manifest android-contentprovider manifest-merging

34
推荐指数
1
解决办法
1万
查看次数