不同于之前講到的Android應用組件,如與用戶直接交互UI組件Activity;運行在后臺、用戶不可見的服務組件Service以及進行系統(tǒng)消息廣播的廣播組件Broadcast Receivers。內(nèi)容提供器(Content Providers)是Android提供的一個在不同應用間傳遞、分享數(shù)據(jù)的機制,這些數(shù)據(jù)可以存儲在文件系統(tǒng)、SQLite數(shù)據(jù)庫等中。
當要使用content provider訪問數(shù)據(jù)時,我們需要在應用程序的Context中使用ContentResolver對象作為客戶端,同provider進行通信。與provier對象通信的ContentResolver對象是ContentProvider類的一個實例。provider對象接收從客戶端發(fā)來的數(shù)據(jù),執(zhí)行請求的動作并返回結(jié)果。
1)定義AppWidgetProviderInfo對象
如果你不打算同其他應用程序共享數(shù)據(jù),就沒必要實現(xiàn)provider。但是,如果希望在自己的應用程序中搜索建議的功能,就需要實現(xiàn)自己的provider。同樣的,如果希望在自己的應用程序和其他的應用程序間拷貝粘貼復雜的數(shù)據(jù)或文件,也需要實現(xiàn)自己的provider。
自定義的內(nèi)容提供器必須擴展自android.content.ContentProvider基類。
如果期望應用將擁有的數(shù)據(jù)變?yōu)楣矓?shù)據(jù),開發(fā)者可以通過自定義應用自己的內(nèi)容提供器,或者將數(shù)據(jù)添加到已有的內(nèi)容提供器中的方式來進行。下面是一個內(nèi)容提供器的定義:
< provider
android:name=".provider.EmailProvider"
android:authorities="com.android.email.provider"
android:multiprocess="true"
android:permission="com.android.email.permission.ACCESS_PROVIDER"
/>
Android系統(tǒng)本身也通過content providers來管理數(shù)據(jù),如音頻,視頻,圖像,個人聯(lián)系信息等。我們可以在android.provider包的參考文檔中看到這些providers列表。在一定條件下,這些providers能夠訪問任何Android應用程序。