內容提供程序維護一個共享的應用程序信息工具包,您可以將其保存在文件係統、SQLite數據庫、web或應用程序可以訪問的任何其他確定的存儲位置上。通過使用內容提供程序,如果內容提供程序支持,另一個應用程序可以請求或更改信息。例如,Android係統生成一個控製用戶聯係數據的內容提供程序。因此,任何具有精確調整的應用程序都可以詢問內容提供者,比如ContactsContract。數據,讀取和寫入關於特定人物的知識。將內容提供程序視為數據庫上的一個概念是很有趣的,因為在一般情況下,它們中內置了許多API和幫助。然而,它們與係統設計視圖有一個獨立的核心目的。對於係統來說,內容提供程序是進入應用程序的入口點,用於發布已定義的數據對象,其區別在於URI設計。因此,應用程序可以決定如何將保存在URI名稱空間中的數據起草出來,並將這些URI分發給其他對象,而這些對象又可以使用這些URI來訪問數據。這允許係統在管理應用程序時做一些關鍵的事情:
允許URI不需要應用程序保持運行,因此URI可以在它們所屬的應用程序退出後繼續。當係統必須從類似的URI中恢複應用程序的信息時,係統隻需要確認所有者應用程序仍在工作。
這些uri還提供了廣泛的細粒度防禦模型。例如,一個應用程序可以將它所擁有的圖標的URI放在剪貼板上,但忽略它的內容提供程序的鎖定,以便另一個應用程序不能無障礙地訪問它。當第二個應用程序試圖到達剪貼板上的URI時,係統可以允許該應用程序通過一個臨時URI許可來獲取數據,這樣它就隻允許訪問該URI之後的信息,而在第二個應用程序中不允許訪問其他信息。
內容提供程序對於讀取和寫入對應用程序隱藏且不共享的信息更有用。
內容提供程序是作為ContentProvider的子類操作的,並且必須完成一組通常的api,允許其他應用程序完成關卡。
Android係統設計的唯一特點是,任何應用程序都可以啟動另一個應用程序的元素。例如,如果你想讓用戶用手機的攝像頭拍照,顯然也有一個不同的應用程序,你的應用程序可以使用它,而不是形成一個活動來自己拍照。你不需要包括甚至鏈接到相機應用程序的代碼。或者,你可以簡單地在相機應用程序中啟動拍照的活動。完成後,照片甚至會發送到您的應用程序中,以便您使用。對於用戶來說,相機似乎真的是我們應用程序的一部分。