2011-06-08 44 views
37

我有兩個應用程序使用相同的內容提供者,但我不能在兩個應用程序中放置相同的內容提供者 - 它顯示INSTALL_FAILED_CONFLICTING_PROVIDER錯誤。所以我把我的內容提供商放在第三個.apk文件中,並使用它來自兩個應用程序,它運行良好。內容提供者INSTALL_FAILED_CONFLICTING_PROVIDER(安裝內容提供者作爲一個單獨的apk)

現在的問題是 - 必須安裝內容提供商的apk任何這兩個應用程序都可以在設備上安裝之前。否則,它顯示提供程序在安裝期間未發現錯誤。

那麼,我怎樣才能確保在任何其他apks安裝之前安裝提供者apk?

有沒有辦法將內容提供者apk與其他兩個apks分開合併,因此它們將作爲兩個應用程序一起安裝,並且不會顯示INSTALL_FAILED_CONFLICTING_PROVIDER錯誤?

我需要合併這兩個應用程序內容提供商APK,因爲用戶可能無法同時安裝應用程序或可在單一設備上安裝他們兩個。

+1

這是一個非常有趣的問題。類似的解釋在這裏:http://stackoverflow.com/questions/3578751/conflicting-content-providers。我不確定那裏是否有答案,那就是爲什麼我將它添加爲評論。這讓我想起了使用頭文件獲得C/C++的問題,以及爲什麼使用#ifndef/#define – plainjimbo 2011-06-08 03:08:19

+1

@James感謝您的回覆。我想到了你提到的主題中提供的解決方案,但我正在尋求更好的東西。把提供程序放在一個單獨的apk中並首先安裝它可以解決錯誤INSTALL_FAILED_CONFLICTING_PROVIDER,我認爲比保留兩個提供程序更好。但我需要確保提供程序apk先安裝或以某種方式合併,正如我所提到的。 – Imon 2011-06-08 06:16:19

+0

另請參閱@CommonsWare的綜合答案http://stackoverflow.com/a/10791144/94363 – rds 2012-12-10 16:14:20

回答

13

一個解決方案,我可以想到的是,使這兩個不同的包標識的internally.and出口的應用程序的內容提供商組成部分它採用了android:出口=真。儘管兩者可能都使用相同的代碼。

在您檢查設備上是否存在其他內容供應商的應用程序的開始,如果它的存在,你開始使用它,否則你回退到本地內容提供商。當其他應用程序安裝時,它可以執行相同的檢查。

爲了保護您的強有力的提供者免受其他人侵害,您可以定義一個自定義權限來保護它,以便您的應用程序只能使用它,或者您也可以使用一些自定義身份驗證,如某些密鑰來訪問內容提供者。您可以在內容提供者的所有方法中使用此驗證碼。

+2

這似乎是一個可能的解決方案,但不是我所期望的。也許在android中沒有辦法將兩個apks打包成一個。 – Imon 2012-05-25 03:15:58

37

您可以通過在AndroidManifest.xml文件改變android:authorities價值解決它。錯誤的原因是您的設備上安裝的另一個應用程序已經使用android:authorities的相同值。

9

爲了解決這個錯誤:Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER

變化android:authorities的AndroidManifest.xml文件安裝到您的設備上的其他應用程序已經使用相同的值的Android值:當局。

0

這意味着您的手機已經擁有相同權限的供應商,通過不同的應用程序註冊(可能是您的其他示例)。更改您的供應商權限,即android:authorities,您的行爲很好。

2

您這兩個程序使用如Facebook API註冊NUMER或類似的東西一個新聞中心的數據在你的清單文件(AndroidManifest.xml中):對於已經安裝和要嘗試着安裝。您需要:

  1. 試圖找到這樣的事情,並檢查是爲您當前 程序:

android:authorities="com.facebook.app.FacebookContentProvider23473465463573466" android:name="com.facebook.FacebookContentProvider" android:exported="true"/>

  • 檢查是不是dublicate在另一程序如果它是爲您嘗試安裝的 程序。