2010-08-26 101 views
4

我正在開發一個使用ContentProvider的應用程序。它在清單中聲明:衝突的內容提供商

<provider android:name="foor.bar.FooBarProvider" 
      android:authorities="foo.bar.FoorBarProvider" /> 

一切工作正常,我可以訪問提供商。問題是我想創建我的應用程序的演示版本,我希望它共享相同的內容提供程序,因此當用戶安裝完整版本時,數據保持同步。另外,應該可以只安裝完整版或演示版。因此,我必須包含我的內容提供商均爲

現在,當我嘗試安裝兩個應用程序,我得到一個INSTALL_FAILED_CONFLICTING_PROVIDER錯誤消息,顯然是因爲這兩個AndroidManifest聲明相同的內容提供商。

有沒有辦法在Manifest中告訴,只有在內容提供者不存在的情況下才應該使用這個內容提供者?還是另一種解決方法?

解決方案是完整版將數據從演示內容提供者遷移到完整版內容提供者,但我寧願避免這種情況。

回答

5

一種解決方案是完整 版本的數據從一個演示 內容提供商到完整版本 內容提供商遷移,但我寧願 避免這種情況。

這裏是事件的可能序列:

  1. 用戶安裝精簡版的版本
  2. 用戶用戶精簡版的版本,存儲數據
  3. 用戶升級到完整版,但你不拷貝過來您上面引用段落的數據爲
  4. 用戶卸載lite版本,刪除其數據
  5. 用戶爲您提供一星級的市場評級

您需要在完整版的第一次運行時將數據從lite複製到完整版以避免此問題。

+0

那麼我想要的是內容提供商安裝一次(由lite或全部,無論先安裝),然後重新使用,如果用戶安裝另一個版本。 – Julien 2010-08-27 08:12:57

+1

@ Julien:那是不可能的。內容提供者屬於一個應用程序。他們卸載應用程序,他們卸載內容提供商。 – CommonsWare 2010-08-27 09:05:18

+0

好的,我會繼續進行數據遷移和兩個內容提供者。謝謝 – Julien 2010-08-27 13:46:43