我有两个使用相同内容提供程序的应用程序,但我不能在两个应用程序中放置相同的内容提供程序 - 它显示INSTALL_FAILED_CONFLICTING_PROVIDER错误。所以我把我的内容提供商放在了第三个.apk中,并从两个应用程序中使用它,它运行良好。
现在问题是 - 必须先安装内容提供商apk,然后才能在设备上安装这两个应用程序中的任何一个。否则,它会在安装期间显示Provider not found错误。
那么,如何在安装任何其他apks之前确保安装了提供程序apk?
有没有办法将内容提供程序apk与其他两个apks单独合并,因此它们将作为两个应用程序一起安装,并且不会显示INSTALL_FAILED_CONFLICTING_PROVIDER错误?
我需要将内容提供程序apk与两个应用程序合并,因为用户可能无法同时安装这两个应用程序,也可能将它们安装在一台设备上。
答案 0 :(得分:37)
您可以通过更改android:authorities
文件中AndroidManifest.xml
的值来解决此问题。出现此错误的原因是您的设备上安装的另一个应用程序已使用android:authorities
的相同值。
答案 1 :(得分:13)
我能想到的一个解决方案是,使内容提供者成为内部不同packageid的应用程序的一部分。并使用android:exported = true导出它。两者都可能使用相同的代码。
在应用程序启动时,您检查设备上是否存在其他内容提供商(如果您已开始使用它),否则您将回退到本地内容提供商。当其他应用程序安装时,它可以进行相同的检查。
为了保护您的强大提供商免受其他人的侵害,您可以定义一个自定义权限来保护它,以便您的应用程序只能使用它,或者您也可以使用某些自定义身份验证来访问内容提供商。您可以在内容提供商的所有方法中使用此身份验证代码。
答案 2 :(得分:9)
要解决此错误: Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
更改 AndroidManifest.xml 文件中 android:authorities
的值,设备上安装的另一个应用程序已经为android:authorities使用相同的值。
答案 3 :(得分:2)
您可以在清单文件(AndroidManifest.xml)中为两个程序使用一个统一的数据,例如Facebook API注册数字或类似内容:已安装的数据和您尝试无法安装的数据。你需要:
android:authorities =“com.facebook.app.FacebookContentProvider23473465463573466”android:name =“com.facebook.FacebookContentProvider”android:exported =“true”/>
答案 4 :(得分:0)
这意味着您的手机已经拥有相同权限的提供商,由不同的应用程序注册(可能是您的另一个例子)。更改您的提供商权限,即android:authorities
,您就可以了。