android - 多个应用程序使用相同的内容提供商

标签 android android-contentprovider

我正在开发一组仅在某些品牌中独树一帜的应用(想想不同的运动队);但是,我遇到了一个问题,我为所有特定品牌的应用程序使用一个库项目,并希望对所有这些应用程序使用相同的 ContentProvider。当我创建 ContentProvider 时,我将 AUTHORITY 声明为类中的常量(根据开发示例代码),并且我在 list 文件中的每个特定应用程序中使用相同的权限。看起来我无法在每个应用程序中使用相同的权限,因为在尝试安装第二个应用程序时出现此错误(我安装了一个品牌的应用程序很好,但第二次安装):

WARN/PackageManager(66): Can't install because provider name com.xxx.Provider (in package com.xxx) is already used by com.zzz

我尝试了几种方法,但似乎都不起作用。我还没有完成的一个想法是创建一个库 jar 并忽略我拥有的 Provider 类并在每个特定的应用程序中对其进行自定义。关于如何在不诉诸于此的情况下解决此问题的任何想法?

最佳答案

这是一个老问题,但我最近正在考虑做类似的事情。有了 Build 风格,现在真的很简单。

在 gradle 文件中指定 BuildConfigField:

    productFlavors {
    free {
        applicationId "com.example.free"
        buildConfigField 'String', 'AUTHORITY', '"com.example.free.contentprovider"'
    }

    paid {
        applicationId "com.example.paid"
        buildConfigField 'String', 'AUTHORITY', '"com.example.paid.contentprovider"'
    }

在 list 中指定提供者权限:

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

使用 BuildConfigField 变量在提供者中设置权限:

    public static final String AUTHORITY = BuildConfig.AUTHORITY

关于android - 多个应用程序使用相同的内容提供商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3306639/

相关文章:

android - Android中查询、备份、删除、插入联系人

android - 有没有办法为 SearchRecentSuggestionsProvider 指定图标?

c# - 为什么我不能将早期的 xamarin 表单版本作为 nuget 添加到我的 Xamarin 表单项目/android 包中?

java - 仅显示一次广告 View

Android 4.3 crop gallery resultCode 取消

java - 无法获取 fragment 中的参数

android - 如何将文件映射上传到php服务器

javascript - Android WebView 不允许加载本地视频文件

java - 试图获取联系信息无效的列数据1

android - 在 onReceive() 监听之前注销广播调用