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}" 

重要的是,你的供應商對每一個應用程序的唯一。