2010-08-26 102 views
4

我正在开发一个使用ContentProvider的应用程序。它在清单中声明:冲突的内容提供商

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

一切工作正常,我可以访问提供商。问题是我想创建我的应用程序的演示版本,我希望它共享相同的内容提供程序,因此当用户安装完整版本时,数据保持同步。另外,应该可以只安装完整版或演示版。因此,我必须包含我的内容提供商均为

现在,当我尝试安装两个应用程序,我得到一个INSTALL_FAILED_CONFLICTING_PROVIDER错误消息,显然是因为这两个AndroidManifest声明相同的内容提供商。

有没有办法在Manifest中告诉,只有在内容提供者不存在的情况下才应该使用这个内容提供者?还是另一种解决方法?

解决方案是完整版将数据从演示内容提供者迁移到完整版内容提供者,但我宁愿避免这种情况。

回答

5

一种解决方案是完整 版本的数据从一个演示 内容提供商到完整版本 内容提供商迁移,但我宁愿 避免这种情况。

这里是事件的可能序列:

  1. 用户安装精简版的版本
  2. 用户用户精简版的版本,存储数据
  3. 用户升级到完整版,但你不拷贝过来您上面引用段落的数据为
  4. 用户卸载lite版本,删除其数据
  5. 用户为您提供一星级的市场评级

您需要在完整版的第一次运行时将数据从lite复制到完整版以避免此问题。

+0

那么我想要的是内容提供商安装一次(由lite或全部,无论先安装),然后重新使用,如果用户安装另一个版本。 – Julien 2010-08-27 08:12:57

+1

@ Julien:那是不可能的。内容提供者属于一个应用程序。他们卸载应用程序,他们卸载内容提供商。 – CommonsWare 2010-08-27 09:05:18

+0

好的,我会继续进行数据迁移和两个内容提供者。谢谢 – Julien 2010-08-27 13:46:43