Android學習總結——Content Provider

來源:互聯網
上載者:User

標籤:

原文地址:http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html

Content Provider內容提供者 :

android平台提供了Content Provider使一個應用程式的指定資料集提供給其他應用程式。這些資料可以儲存在檔案系統中、在一個SQLite資料庫、或以任何其他合理的方式,

其他應用可以通過ContentResolver類(見ContentProviderAccessApp例子)從該內容提供者中擷取或存入資料.(相當於在應用外包了一層殼),

只有需要在多個應用程式間共用資料是才需要內容提供者。例如,通訊錄資料被多個應用程式使用,且必須儲存在一個內容提供者中

它的好處:統一資料訪問方式。

android系統內建的內容提供者(頂級的表示資料庫名,非頂級的都是表名)這些內容提供者在SDK文檔的android.provider Java包中都有介紹。見:http://developer.android.com/reference/android/provider/package-summary.html

├────Browser

├────CallLog

├────Contacts

│                ├────Groups

│                ├────People

│                ├────Phones

│                └────Photos

├────Images

│                └────Thumbnails

├────MediaStore

│                ├────Albums

│                ├────Artists

│                ├────Audio

│                ├────Genres

│                └────Playlists

├────Settings

└────Video

 CallLog:地址和接收到的電話資訊

 Contact.People.Phones:儲存電話號碼

 Setting.System:系統設定和喜好設定

使用Content Provider對外共用資料的步驟

1>繼承ContentProvider類並根據需求重寫以下方法:

public boolean onCreate();//處理初始化操作       /**        * 插入資料到內容提供者(允許其他應用向你的應用中插入資料時重寫)        * @param uri        * @param initialValues 插入的資料        * @return        */       public Uri insert(Uri uri, ContentValues initialValues);       /**        * 從內容提供者中刪除資料(允許其他應用刪除你應用的資料時重寫)        * @param uri        * @param selection 條件陳述式        * @param selectionArgs 參數        * @return        */       public int delete(Uri uri, String selection, String[] selectionArgs);       /**        * 更新內容提供者已存在的資料(允許其他應用程式更新你應用的資料時重寫)        * @param uri        * @param values 更新的資料        * @param selection 條件陳述式        * @param selectionArgs 參數        * @return        */       public int update(Uri uri, ContentValues values, String selection,                     String[] selectionArgs);       /**        * 返回資料給調用者(允許其他應用從你的應用中擷取資料時重寫)        * @param uri        * @param projection 列名        * @param selection 條件陳述式        * @param selectionArgs 參數        * @param sortOrder 排序        * @return        */       public Cursor query(Uri uri, String[] projection, String selection,                     String[] selectionArgs, String sortOrder) ;                /**        * 用於返回當前Uri所代表資料的MIME類型        * 如果操作的資料為集合類型(多條資料),那麼返回的類型字串應該為vnd.android.cursor.dir/開頭        * 例如要得到所有person記錄的Uri為content://com.bravestarr.provider.personprovider/person,     *   那麼返回的MIME類型字串應該為"vnd.android.cursor.dir/person"        * 如果操作的資料為單一資料,那麼返回的類型字串應該為vnd.android.cursor.item/開頭        * 例如要得到id為10的person記錄的Uri為content://com.bravestarr.provider.personprovider/person/10,     *   那麼返回的MIME類型字串應該為"vnd.android.cursor.item/person"        * @param uri        */       public String getType(Uri uri)

這些方法中的Uri參數,得到後需要進行解析然後做對應處理,Uri表示要操作的資料,包含兩部分資訊:

       1.需要操作的contentprovider

       2.對contentprovider中的什麼資料進行操作,一個Uri格式:結構頭://authorities(網域名稱)/路徑(要操作的資料,根據業務而定)

              content://com.bravestarr.provider.personprovider/person/10

說明:contentprovider的結構頭已經由android規定為content://

authorities用於唯一標識這個contentprovider程式,外部調用者可以根據這個找到他

路徑表示我們要操作的資料,路徑的構建根據業務而定.路徑格式如下:                                                        

       要操作person表行號為10的記錄,可以這樣構建/person/10

       要操作person表的所有記錄,可以這樣構建/person

2>在AndroidManifest.xml中使用<provider>對ContentProvider進行配置註冊(內容提供者註冊它自己就像網站註冊網域名稱),ContentProvider採用authoritie(原意授權,可理解為網域名稱)作為唯一標識,方便其他應用能找到

<application        android:icon="@drawable/ic_launcher"        android:label="@string/app_name" >        <!-- authorities屬性命名建議:公司名.provider.SomeProvider-->        <provider android:name=".PersonProvider" android:authorities="com.bravestarr.provider.personprovider"/>         ...</application>

 

Android學習總結——Content Provider

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.