0

我有手机,他们需要分享与内容提供商的数据,而每个应用程序安装首先,必须创建表和URI,所以在所有的应用程序,我应该在清单申报提供商在超过5级的应用,给予应用程序权限来初始化提供者。但是我得到了安装错误:INSTALL_FAILED_CONFLICTING_PROVIDER错误,我该如何管理这个问题?Android的内容提供商错误INSTALL_FAILED_CONFLICTING_PROVIDER

回答

2

I have more than 5 applications on the phone that they need to share data with content provider

很可能,这不是一个好主意。

so in all applications I should declare provider in manifest, to give the application authority to initialize provider

这是行不通的。

But I got Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER error

这就是为什么不行。

how can I manage this problem ?

暂时假设这是一个好主意,您可以将上应用程序与标记为android:enabled="false"<provider>。然后,第一个应用程序可以尝试访问ContentProvider,并且当它确定没有其他人已经建立了ContentProvider,它可以使自己的(见PackageManagersetComponentEnabledSetting())。

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

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

+0

谢谢您的回答!不幸的是,我无法管理应用安装顺序。这些应用程序中的任何一个都可以先安装。如何为这种情况实现共享数据存储? – alexanoid

+0

@alexanoid:“如何为这种情况实现共享数据存储?” - 我不知道这个好策略。这是一个复杂的问题,因为用户可以以任何顺序卸载任何应用程序。我的直觉反应是*不*尝试持续共享数据,而是让用户能够将数据从一个应用程序显式复制到另一个应用程序。您可以尝试将这些数据保存在外部存储的某个公共位置,这些位置在卸载应用程序时不会被删除,但在卸载最后一个应用程序时无法清除。 – CommonsWare

+0

再次感谢!在简单的文本文件的情况下,我可以使用一种简单的方法。例如文件f =新的文件(的getContext()getFilesDir(),“someveryvery uniquename.txt”。);为了共享所有应用程序之间的信息(读/写)?为此目的使用getFilesDir()方法是一个好主意吗? – alexanoid

0

你应该定义在每一个应用程序的清单提供这样的:

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

重要的是,你的供应商对每一个应用程序的唯一。