android内容提供程序错误INSTALL_FAILED_CONFLICTING_PROVIDER

时间:2013-01-19 21:51:24

标签: android sqlite android-contentprovider android-contentresolver

我手机上有超过5个应用程序,他们需要与内容提供商共享数据,并且每个应用程序首先安装,必须创建表和URI,所以在所有应用程序中我应该在清单中声明提供者,以授予应用程序权限初始化提供者。但是我收到安装错误:INSTALL_FAILED_CONFLICTING_PROVIDER错误,我该如何处理这个问题?

2 个答案:

答案 0 :(得分:2)

  

我手机上有超过5个应用程序需要与内容提供商共享数据

最有可能的是,这不是一个好主意。

  

因此,在所有应用程序中,我应该在清单中声明提供程序,以授予应用程序权限以初始化提供程序

那不行。

  

但我收到安装错误:INSTALL_FAILED_CONFLICTING_PROVIDER错误

这就是为什么不起作用的原因。

  

我该如何处理这个问题?

假设目前这是一个好主意,您可以发送应用<provider>标记为android:enabled="false"。然后,第一个应用可能会尝试访问ContentProvider,当确定其他人没有设置ContentProvider时,它可以自行启用(请参阅PackageManager和{{1} })。

因此,我们假设您的五个应用程序名为A,B,C,D和E.首先安装A.用户运行它,A看到没有setComponentEnabledSetting(),并启用它自己的。用户继续安装B,C,D和E,他们都使用A的ContentProvider来存储他们的数据。用户现在卸载A. B,C,D和E将丢失所有数据,因为在卸载A时它们的数据会消失。用户很可能不会欣赏这一点。

唯一一个好主意的情况是B,C,D和E应该完全依赖于A.在这种情况下,B,C,D和E不需要自己的{{ 1}},因为他们总是可以使用A,如果A不存在,那就是用户的错。

答案 1 :(得分:0)

您应该在每个应用的清单中定义提供商,如下所示:

android:authorities="com.app.SomeContentProvider${applicationId}"

您的提供商对每个应用都是独一无二的。