Android共用資料 ContentProvider 的使用

來源:互聯網
上載者:User

標籤:

ContentResolver 與 ContentProvider 的作用

ContentProvider 負責:

組織應用程式資料

向其他應用程式提供共用資料

 

ContentResolver 負責

擷取ContentProvider提供的資料

增刪改查 資料

 

讓自己的資料和其它應用程式共用有兩種方式:建立自己的Content Provider (即繼承自Content Provider的子類) 或者是將自己的資料添加到已有的Content Provider中去,後者需要保證現有的Content Provider和自己的資料類型相同並且具有該 Content Provider的寫入的許可權。  (1)  建立資料的儲存系統 

      資料的儲存系統可以由開發人員任意決定,一般來講,大多數的Content Provider都通過Android的檔案儲存體系統或SQLite 資料庫建立自己的資料存放區系統。 

 (2)擴充 ContentProvider類

       開發一個繼承自ContentProvider類的 子類代碼來擴充 ContentProvider類,在這個步驟主要的工作是將要共用的資料封裝並以ContentResolver 和  Cursor對象能夠訪問到的形式對外展示。具體來說需要實現ContentProvider 類中的6個抽象方法。       Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder):將查詢的資料以Cursor 對象的形式返回。        Uri insert(Uri uri, ContentValues values):向 Content Provider中插入新資料記錄,ContentValues 為資料記錄的列名和列值對應。        int update(Uri uri, ContentValues values, String selection, String[] selectionArgs):更新Content Provider中已存在的資料記錄。        int delete(Uri uri, String selection, String[] selectionArgs):從Content Provider中刪除資料記錄。        String getType(Uri uri):返回Content Provider中的資料( MIME )類型。        boolean onCreate():當 Content Provider 啟動時被調用。         以上方法將會在ContentResolver 對象中調用,所以很好地實現這些抽象方法會為ContentResolver提供一個完善的外部介面。除了實現抽象方法外,還可以做一些提高可用性的工作。         簡言之,自己APP定義一個 ContentProvider的子類,並實現其中的方法後(在這些方法中對自己分享的資料如sqlite或檔案等進行操作),就將這個ContentProvider“貢獻”出去了。其他APP就能對這個ContentProvider進行增刪查改的操作了。         定義一個 URI 類型的靜態常量,命名為CONTENT_URI。 必須為該常量對象定義一個唯一的URI字串,一般的做法是將 ContentProvider子類的全稱類名作為URI字串,如: "content://wyf.wpf.MyProvider"。(Android系統中可能很多APP提供了ContentProvider,各自要有各自的URI,不能同名)        定義每個欄位的列名,如果採用的資料庫儲存系統為SQLite 資料庫,資料表列名可以採用資料庫中表的列名。不管資料表中有沒有其他的唯一標識一個記錄的欄位,都應該定義一個"_id"欄位 來唯一標識一個記錄。模式使用 "INTEGER PRIMARY KEY AUTOINCREMENT" 自動更新 一般將這些列名字串定義為靜態常量, 如"_id"欄位名定義為一個名為"_ID"  值為 "_id" 的靜態字串對象。(不管自己分享給ContentProvider的來源資料是sqlite還是檔案,最後都要整理成sqlite資料的形式提供給其他APP操作 )  (3)在應用程式的AdnroidManifest.xml 檔案中聲明Content Provider組件。 

        建立好一個Content Provider必須要在應用程式的AndroidManifest.xml 中進行聲明,否則該Content Provider對於 Android系統將是不可見的。(艾瑪,你好人好事都做好了,總得說一聲吧,不然別人哪能知道)如果有一個名為MyProvider的類擴充了 ContentProvider類,聲明該組件的代碼如下:        <provider name="wyf.wpf.MyProvider"                 authorities="wyf.wpf.myprovider"                 ...../>   <!-- 為<provider>標記添加name、authorities屬性-->        其中name屬性為ContentProvider 子類的全稱類名,authorities 屬性唯一標識了一個ContentProvider。還可以通過 setReadPermission() 和setWritePermission() 來設定其操作許可權。當然也可以再上面的 xml中加入 android:readPermission 或者 android: writePermission屬性來控制其許可權。         注意:因為ContentProvider可能被不同的進程和線程調用,所以繼承ContentProvider後所實現的那些方法必須是安全執行緒的。

 

參考資源 :http://blog.csdn.net/berber78/article/details/17680697

Android共用資料 ContentProvider 的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.