我们正在尝试发布一个免费广告的付费广告版本,该应用目前免费发布广告.我们将所有包名重构为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而没有任何冲突.所以基本上使用配置机制进行依赖注入.