Android重复提供商权限问题

我们正在尝试发布一个免费广告的付费广告版本,该应用目前免费发布广告.我们将所有包名重构为com.mycompanyname.appname.pro,市场上的免费包基本上没有.pro.我们也进入了我们的内容提供商,并将权限更改为与包名相同.所以“免费版”有
AUTHORITY = "com.mycompanyname.appname"

并且“无广告付费版本有

AUTHORITY = "com.mycompanyname.appname.pro"

但是我们仍然无法在同一设备上同时安装免费版和“专业版”.无论它的价值如何,提供商的类名在两个应用程序中都是相同的.

我们无法直接从apk安装,如果我们尝试从Android市场下载,我们会收到“重复的提供商权限”错误消息.

我们缺少什么?还有另一个地方我们需要寻找问题,还是我们在这里遇到了根本错误的问题?

解决方法

基本上我所做的是,为每个ContentProviders创建一个抽象基类,并从我想要创建的每个应用程序继承它,覆盖权限路径.所以在我的AbstractContentProvider中我有
public AbstractContentProvider() {
    sURIMatcher.addURI(getAuthority(),BASE_PATH,ITEMS);
    sURIMatcher.addURI(getAuthority(),BASE_PATH + "/#",ITEM_ID);
}

protected abstract String getAuthority();

然后在每个子类中我有

private static final String AUTHORITY = "my.package.app1.ContentProvider";

@Override
protected String getAuthority() {
    return AUTHORITY;
}

在AndroidManifest中我注册这些:

<provider
          android:name="my.package.app1.ContentProvider"
          android:authorities="my.package.app1.ContentProvider">
    </provider>

现在的诀窍是,我想在公共(库)代码中访问这些内容提供程序,这些代码不了解特定于应用程序的类.为此,我在strings.xml中定义了一个String,我为每个应用程序覆盖.然后我可以使用:

Uri.parse(getString(R.string.contentProviderUri))

并且在每个应用程序中使用正确的ContentProvider而没有任何冲突.所以基本上使用配置机制进行依赖注入.

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...