2014-06-20 47 views
0

我們可以允許其他應用程序訪問一個應用程序的ContentProvider,但他們只能訪問提供應用程序希望公開的部分數據。使用ContentProvider提供受限訪問

換句話說,ContentProvider是完全訪問數據還是沒有數據。如果不是如何?

回答

0

答案取決於您希望其他應用程序如何訪問ContentProvider中的數據。

如果您希望第三方應用程序能夠在任何時間點從您的提供商那裏檢索數據(出於任何原因),那麼正常行爲是允許他們訪問該提供者中的所有內容,只要他們持有正確的權限。您可以要求第三方應用程序擁有某些權限以在您的提供商中讀取和/或寫入數據。理論上可以使用Binder.getCallingUid()來嘗試確定試圖與提供者一起工作的應用程序,並基於請求者是誰來限制訪問,但我沒有嘗試過,並且在任何情況下都可能不實際。

但是,如果你想要的第三方應用程序,從您的供應商只有當你問他們檢索數據 - 通常是通過推出自己的活動之一 - 你可以訪問的範圍限制爲單個Uri 。例如,這將是電子郵件客戶端將使用的模式。某些電子郵件具有附件,電子郵件客戶端想要在其他某個應用程序中打開該附件(例如PDF閱讀器中的PDF附件)。電子郵件客戶端將通過ContentProvider提供附件,但不允許任意訪問(android:exported="false")。然後,他們將使用FLAG_ACTIVITY_GRANT_READ_PERMISSION之類的標記來啓動第三方應用,以表示第三方應用可以使用Intent中的Uri從提供商檢索數據。

+0

我的問題是應用程序是否可以限制對某些子數據(比如圖片)的訪問,同時允許通過ContentProvider訪問其他子數據(聯繫人,視頻)。 –

+0

@SrikanthReddy:恕我直言,你更好地服務創建單獨的提供者。 – CommonsWare