java - 动态设置一个ContentProvider的权限

标签 java android android-contentprovider

也许标题有点误导。我的问题是我有一个 Android 库项目,它在两个标准 Android 项目之间共享:一个用于应用程序的免费版本,另一个用于付费版本。该库目前有一个 ContentProvider 的代码,包括一个带有几个静态字符串变量的契约(Contract)类,用于 URI 和列名等内容。现在我希望 URI 的“权限”根据正在使用该库的应用程序进行更改。想到的一种解决方案是将权限存储为字符串资源,并在运行时将该字符串加载到静态最终字符串变量中。但是,我不确定如何执行此操作,因为契约(Contract)类有一个私有(private)构造函数并且没有 Context 对象来加载字符串资源。还有哪些其他选项可以解决我的问题?

最佳答案

对于那些使用较新版本构建工具的人来说,这是一个更好的解决方案:使权限与您的应用程序 ID 相关。您可以使用 ${applicationId} 自动执行此操作,它会在构建过程中扩展为您应用的应用程序 ID。

<provider
    android:name=".MyContentProvider"
    android:authorities="${applicationId}.provider"/>

假设您的应用程序 ID 是 com.example.app.paidcom.example.app.free。当您构建您的应用程序时,权限将相应地变为 com.example.app.paid.providercom.example.app.free.provider

要在您的代码中引用提供者权限,请使用 BuildConfig.APPLICATION_ID + ".provider"

关于java - 动态设置一个ContentProvider的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16268119/

相关文章:

java - 在 MacOS 上,我可以在 Java 应用程序的 Info.plist 文件中添加默认设置吗

java - 如何在java中给出txt的读取路径?

android - 找不到 ContentProvider 的提供商信息

android - 如何通过我的 ContentProvider 在 insert() 命令中使用子查询?

java - OperationException 导致错误请求错误

java - 我如何将两个子字符串绑定(bind)到一个?

android - 如何在 Windows 7 上安装 Nexus One 的 USB 驱动程序以进行调试?

android - BottomNavigationView 上的徽章

android - findViewById 为 SurfaceView 返回 null

android - 从相机中选择照片