冲突的内容提供商

4

我正在开发一个使用ContentProvider的应用程序。它在清单文件中声明如下:

<provider android:name="foor.bar.FooBarProvider"
          android:authorities="foo.bar.FoorBarProvider" />

一切都正常,我可以访问提供者。问题在于,我想创建一个演示版的应用程序,并希望它共享相同的内容提供程序,以便用户安装完整版本后,数据保持同步。此外,应该可以仅安装完整版或演示版。因此,我必须在两个中包含我的内容提供程序。
现在,当我尝试安装这两个应用程序时,我会收到“INSTALL_FAILED_CONFLICTING_PROVIDER”错误消息,显然是因为两个AndroidManifest声明了相同的内容提供程序。
是否有一种方法可以在清单中说明只有在不存在内容提供程序时才使用该内容提供程序?还有其他解决方法吗?
一个解决方法是完整版将数据从演示内容提供程序迁移到完整版内容提供程序,但我宁愿避免这种情况。
1个回答

5
一个解决方案是完整版将数据从演示内容提供者迁移到完整版内容提供者,但我更愿意避免这种情况。
以下是可能发生的事件序列:
1. 用户安装精简版 2. 用户使用精简版并存储数据 3. 用户升级到完整版,但根据您引用的段落,不会复制数据 4. 用户卸载精简版,删除其数据 5. 用户在市场上给你一个一星评价
为了避免这个问题,在完整版的第一次运行时需要从精简版克隆数据。

我想要的是,内容提供程序只需安装一次(由轻量版或完整版安装,以先安装的为准),然后如果用户安装另一个版本,则可以重复使用。 - Julien
1
@Julien:这是不可能的。内容提供者属于一个应用程序。如果他们卸载了应用程序,那么他们也会卸载内容提供者。 - CommonsWare
好的,那我就继续进行数据迁移和两个内容提供者。谢谢。 - Julien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接