我有手機,他們需要分享與內容提供商的數據,而每個應用程序安裝首先,必須創建表和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