我有手机,他们需要分享与内容提供商的数据,而每个应用程序安装首先,必须创建表和URI,所以在所有的应用程序,我应该在清单申报提供商在超过5级的应用,给予应用程序权限来初始化提供者。但是我得到了安装错误:INSTALL_FAILED_CONFLICTING_PROVIDER错误,我该如何管理这个问题?Android的内容提供商错误INSTALL_FAILED_CONFLICTING_PROVIDER
回答
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
,它可以使自己的(见PackageManager
和setComponentEnabledSetting()
)。
所以,让我们假设你的五个应用程序被命名为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不存在,那就是用户的错误。
你应该定义在每一个应用程序的清单提供这样的:
android:authorities="com.app.SomeContentProvider${applicationId}"
重要的是,你的供应商对每一个应用程序的唯一。
- 1. Android内容提供商测试的真正内容提供商
- 2. 内容提供商的错误
- 3. android内容提供商
- 4. Android内容提供商
- 5. 内容提供商
- 6. 内容提供商
- 7. Android的Facebook内容提供商权威
- 8. Android的定制内容提供商
- 9. Android的内容提供商权限
- 10. Android内容提供商光标查询
- 11. 无法访问Android内容提供商
- 12. 短信内容提供商在android?
- 13. Android联系人内容提供商
- 14. Android私人内容提供商?
- 15. Android内容提供商Uri匹配
- 16. Android内容提供商列表
- 17. Android内容提供商独特查询
- 18. Android短信内容提供商
- 19. Android内容提供商Uri匹配
- 20. 通过Android中的内容提供商提供图像
- 21. 错误提供商
- 22. 注册内容提供商
- 23. 内容提供商了Exa
- 24. Spotify内容提供商
- 25. Content_URI在内容提供商
- 26. 访问内容提供商
- 27. 帮助内容提供商
- 28. Android的内容提供商给未知的URL内容:// COM
- 29. 内容提供商中的列表内容Android 3.1
- 30. 内容提供商用户词典上的查询错误
谢谢您的回答!不幸的是,我无法管理应用安装顺序。这些应用程序中的任何一个都可以先安装。如何为这种情况实现共享数据存储? – alexanoid
@alexanoid:“如何为这种情况实现共享数据存储?” - 我不知道这个好策略。这是一个复杂的问题,因为用户可以以任何顺序卸载任何应用程序。我的直觉反应是*不*尝试持续共享数据,而是让用户能够将数据从一个应用程序显式复制到另一个应用程序。您可以尝试将这些数据保存在外部存储的某个公共位置,这些位置在卸载应用程序时不会被删除,但在卸载最后一个应用程序时无法清除。 – CommonsWare
再次感谢!在简单的文本文件的情况下,我可以使用一种简单的方法。例如文件f =新的文件(的getContext()getFilesDir(),“someveryvery uniquename.txt”。);为了共享所有应用程序之间的信息(读/写)?为此目的使用getFilesDir()方法是一个好主意吗? – alexanoid