Android重复提供商权限问题

前端之家收集整理的这篇文章主要介绍了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相关文章